gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
 * @license
 * Copyright 2018 Google LLC. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * =============================================================================
 */
import { Optimizer } from './optimizers/optimizer';
import { registerClass, SerializationMap } from './serialization';
describe('registerClass', () => {
    const randomClassName = `OptimizerForTest${Math.random()}`;
    class OptimizerForTest extends Optimizer {
        constructor() {
            super();
        }
        applyGradients(variableGradients) { }
        getConfig() {
            return {};
        }
    }
    OptimizerForTest.className = randomClassName;
    it('registerClass succeeds', () => {
        registerClass(OptimizerForTest);
        expect(SerializationMap.getMap().classNameMap[randomClassName] != null)
            .toEqual(true);
    });
    class OptimizerWithoutClassName extends Optimizer {
        constructor() {
            super();
        }
        applyGradients(variableGradients) { }
        getConfig() {
            return {};
        }
    }
    it('registerClass fails on missing className', () => {
        // tslint:disable-next-line:no-any
        expect(() => registerClass(OptimizerWithoutClassName))
            .toThrowError(/does not have the static className property/);
    });
    class OptimizerWithEmptyClassName extends Optimizer {
        constructor() {
            super();
        }
        applyGradients(variableGradients) { }
        getConfig() {
            return {};
        }
    }
    OptimizerWithEmptyClassName.className = '';
    it('registerClass fails on missing className', () => {
        expect(() => registerClass(OptimizerWithEmptyClassName))
            .toThrowError(/has an empty-string as its className/);
    });
    class OptimizerWithNonStringClassName extends Optimizer {
        constructor() {
            super();
        }
        applyGradients(variableGradients) { }
        getConfig() {
            return {};
        }
    }
    OptimizerWithNonStringClassName.className = 42;
    it('registerClass fails on missing className', () => {
        // tslint:disable-next-line:no-any
        expect(() => registerClass(OptimizerWithNonStringClassName))
            .toThrowError(/is required to be a string, but got type number/);
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbl90ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9zZXJpYWxpemF0aW9uX3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBYSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUc1RSxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDM0QsTUFBTSxnQkFBaUIsU0FBUSxTQUFTO1FBRXRDO1lBQ0UsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBQ0QsY0FBYyxDQUFDLGlCQUFtQyxJQUFHLENBQUM7UUFFdEQsU0FBUztZQUNQLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQzs7SUFSTSwwQkFBUyxHQUFHLGVBQWUsQ0FBQztJQVVyQyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDO2FBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0seUJBQTBCLFNBQVEsU0FBUztRQUMvQztZQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUNELGNBQWMsQ0FBQyxpQkFBbUMsSUFBRyxDQUFDO1FBRXRELFNBQVM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7S0FDRjtJQUNELEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7UUFDbEQsa0NBQWtDO1FBQ2xDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMseUJBQWdDLENBQUMsQ0FBQzthQUN4RCxZQUFZLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sMkJBQTRCLFNBQVEsU0FBUztRQUVqRDtZQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUNELGNBQWMsQ0FBQyxpQkFBbUMsSUFBRyxDQUFDO1FBRXRELFNBQVM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7O0lBUk0scUNBQVMsR0FBRyxFQUFFLENBQUM7SUFVeEIsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7YUFDbkQsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLCtCQUFnQyxTQUFRLFNBQVM7UUFFckQ7WUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNWLENBQUM7UUFDRCxjQUFjLENBQUMsaUJBQW1DLElBQUcsQ0FBQztRQUV0RCxTQUFTO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDOztJQVJNLHlDQUFTLEdBQUcsRUFBRSxDQUFDO0lBVXhCLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7UUFDbEQsa0NBQWtDO1FBQ2xDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsK0JBQXNDLENBQUMsQ0FBQzthQUM5RCxZQUFZLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wdGltaXplcn0gZnJvbSAnLi9vcHRpbWl6ZXJzL29wdGltaXplcic7XG5pbXBvcnQge0NvbmZpZ0RpY3QsIHJlZ2lzdGVyQ2xhc3MsIFNlcmlhbGl6YXRpb25NYXB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge05hbWVkVmFyaWFibGVNYXB9IGZyb20gJy4vdGVuc29yX3R5cGVzJztcblxuZGVzY3JpYmUoJ3JlZ2lzdGVyQ2xhc3MnLCAoKSA9PiB7XG4gIGNvbnN0IHJhbmRvbUNsYXNzTmFtZSA9IGBPcHRpbWl6ZXJGb3JUZXN0JHtNYXRoLnJhbmRvbSgpfWA7XG4gIGNsYXNzIE9wdGltaXplckZvclRlc3QgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAgIHN0YXRpYyBjbGFzc05hbWUgPSByYW5kb21DbGFzc05hbWU7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcCkge31cblxuICAgIGdldENvbmZpZygpOiBDb25maWdEaWN0IHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cbiAgaXQoJ3JlZ2lzdGVyQ2xhc3Mgc3VjY2VlZHMnLCAoKSA9PiB7XG4gICAgcmVnaXN0ZXJDbGFzcyhPcHRpbWl6ZXJGb3JUZXN0KTtcbiAgICBleHBlY3QoU2VyaWFsaXphdGlvbk1hcC5nZXRNYXAoKS5jbGFzc05hbWVNYXBbcmFuZG9tQ2xhc3NOYW1lXSAhPSBudWxsKVxuICAgICAgICAudG9FcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgY2xhc3MgT3B0aW1pemVyV2l0aG91dENsYXNzTmFtZSBleHRlbmRzIE9wdGltaXplciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcCkge31cblxuICAgIGdldENvbmZpZygpOiBDb25maWdEaWN0IHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cbiAgaXQoJ3JlZ2lzdGVyQ2xhc3MgZmFpbHMgb24gbWlzc2luZyBjbGFzc05hbWUnLCAoKSA9PiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGV4cGVjdCgoKSA9PiByZWdpc3RlckNsYXNzKE9wdGltaXplcldpdGhvdXRDbGFzc05hbWUgYXMgYW55KSlcbiAgICAgICAgLnRvVGhyb3dFcnJvcigvZG9lcyBub3QgaGF2ZSB0aGUgc3RhdGljIGNsYXNzTmFtZSBwcm9wZXJ0eS8pO1xuICB9KTtcblxuICBjbGFzcyBPcHRpbWl6ZXJXaXRoRW1wdHlDbGFzc05hbWUgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAgIHN0YXRpYyBjbGFzc05hbWUgPSAnJztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwKSB7fVxuXG4gICAgZ2V0Q29uZmlnKCk6IENvbmZpZ0RpY3Qge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuICBpdCgncmVnaXN0ZXJDbGFzcyBmYWlscyBvbiBtaXNzaW5nIGNsYXNzTmFtZScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcmVnaXN0ZXJDbGFzcyhPcHRpbWl6ZXJXaXRoRW1wdHlDbGFzc05hbWUpKVxuICAgICAgICAudG9UaHJvd0Vycm9yKC9oYXMgYW4gZW1wdHktc3RyaW5nIGFzIGl0cyBjbGFzc05hbWUvKTtcbiAgfSk7XG5cbiAgY2xhc3MgT3B0aW1pemVyV2l0aE5vblN0cmluZ0NsYXNzTmFtZSBleHRlbmRzIE9wdGltaXplciB7XG4gICAgc3RhdGljIGNsYXNzTmFtZSA9IDQyO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgYXBwbHlHcmFkaWVudHModmFyaWFibGVHcmFkaWVudHM6IE5hbWVkVmFyaWFibGVNYXApIHt9XG5cbiAgICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG4gIGl0KCdyZWdpc3RlckNsYXNzIGZhaWxzIG9uIG1pc3NpbmcgY2xhc3NOYW1lJywgKCkgPT4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBleHBlY3QoKCkgPT4gcmVnaXN0ZXJDbGFzcyhPcHRpbWl6ZXJXaXRoTm9uU3RyaW5nQ2xhc3NOYW1lIGFzIGFueSkpXG4gICAgICAgIC50b1Rocm93RXJyb3IoL2lzIHJlcXVpcmVkIHRvIGJlIGEgc3RyaW5nLCBidXQgZ290IHR5cGUgbnVtYmVyLyk7XG4gIH0pO1xufSk7XG4iXX0=