def test_qnode_weights_with_spec(self, get_circuit, monkeypatch, output_dim, n_qubits): """Test if the build() method correctly passes on user specified weight_specs to the inherited add_weight() method. This is done by monkeypatching add_weight() so that it simply returns its input keyword arguments. The qnode_weights dictionary should then have values that are the input keyword arguments, and we check that the specified weight_specs keywords are there.""" def add_weight_dummy(*args, **kwargs): """Dummy function for mocking out the add_weight method to simply return the input keyword arguments""" return kwargs weight_specs = { "w1": {"initializer": "random_uniform", "trainable": False}, "w2": {"initializer": tf.keras.initializers.RandomNormal(mean=0, stddev=0.5)}, "w3": {}, "w4": {}, "w5": {}, "w6": {}, "w7": {}, } with monkeypatch.context() as m: m.setattr(tf.keras.layers.Layer, "add_weight", add_weight_dummy) c, w = get_circuit layer = KerasLayer(c, w, output_dim, weight_specs=weight_specs) layer.build(input_shape=(10, n_qubits)) for weight in layer.weight_shapes: assert all( item in layer.qnode_weights[weight].items() for item in weight_specs[weight].items() )
def test_qnode_weights(self, get_circuit, n_qubits, output_dim): """Test if the build() method correctly initializes the weights in the qnode_weights dictionary, i.e., that each value of the dictionary has correct shape and name.""" c, w = get_circuit layer = KerasLayer(c, w, output_dim) layer.build(input_shape=(10, n_qubits)) for weight, shape in layer.weight_shapes.items(): assert layer.qnode_weights[weight].shape == shape assert layer.qnode_weights[weight].name[:-2] == weight