コード例 #1
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_copy(self):
     size = 3
     mp = DropoutMask((size, ))
     new_mp = mp.copy()
     mp[0] = True
     assert pnp.sum(mp.mask) > pnp.sum(new_mp.mask)
     assert pnp.sum(new_mp.mask) == 0
コード例 #2
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_shrink_nd(self):
     size = 3
     mp = DropoutMask((size, size - 1))
     for amount in range(mp.mask.size + 1):
         mp[:] = True
         mp.shrink(amount)
         assert pnp.sum(mp.mask) == mp.mask.size - amount
コード例 #3
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_perturbation_mode(self, mode):
        size = 3
        mp = DropoutMask((size, ))

        for amount in [0, size, size + 1]:
            mp.perturb(amount=amount, mode=mode[0])
            mp.perturb(amount=amount, mode=mode[1])
            assert pnp.sum(mp.mask) == 0
コード例 #4
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_init(self):
     size = 3
     with pytest.raises(AssertionError):
         DropoutMask((size, ), mask=pnp.array([True, True, False, False]))
     with pytest.raises(AssertionError):
         DropoutMask((size, ), mask=pnp.array([0, 1, 3]))
     preset = [False, True, False]
     mp = DropoutMask((size, ), mask=pnp.array(preset))
     assert pnp.array_equal(mp.mask, preset)
コード例 #5
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_perturbation_remove_add(self):
        size = 3
        mp = DropoutMask((size, ))

        for amount in [random.randrange(size), 0, size, size + 1]:
            mp.perturb(amount=amount, mode=PerturbationMode.RESET)
            assert pnp.sum(mp.mask) == 0
            mp.perturb(amount=amount, mode=PerturbationMode.SET)
            assert pnp.sum(mp.mask) == min(amount, size)
            mp.clear()
コード例 #6
0
 def _create_circuit_with_entangling_gates(self, size):
     parameters = pnp.random.uniform(low=-pnp.pi,
                                     high=pnp.pi,
                                     size=(size, size))
     return MaskedCircuit.full_circuit(
         parameters=parameters,
         layers=size,
         wires=size,
         entangling_mask=DropoutMask(shape=(size, size - 1)),
     )
コード例 #7
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_wrong_percentage_perturbation(self):
        size = 3
        mp = DropoutMask((size, ))

        for i in [1.1, 1.5, 3.1]:
            mp.perturb(amount=i)
            assert pnp.sum(mp.mask) == round(i)
            mp.clear()
コード例 #8
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_percentage_perturbation(self):
        size = 3
        mp = DropoutMask((size, ))

        for i in [0.01, 0.1, 0.5, 0.9]:
            mp.perturb(amount=i)
            assert pnp.sum(mp.mask) == round(i * mp.mask.size)
            mp.clear()
コード例 #9
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_perturbation(self):
        size = 3
        mp = DropoutMask((size, ))

        for i in range(1, size + 1):
            mp.perturb(i)
            mp.perturb(i, mode=PerturbationMode.RESET)
            assert pnp.sum(mp.mask) == 0
コード例 #10
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
    def test_perturbation_invert_remove(self):
        size = 3
        mp = DropoutMask((size, ))

        for amount in [random.randrange(size), 0, size, size + 1]:
            mp.perturb(amount=amount, mode=PerturbationMode.INVERT)
            reversed_amount = pnp.sum(mp.mask).unwrap()  # unwrap tensor
            mp.perturb(amount=reversed_amount, mode=PerturbationMode.RESET)
            assert pnp.sum(mp.mask) == 0
コード例 #11
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_apply_mask(self):
     size = 3
     mp = DropoutMask((size, ))
     with pytest.raises(IndexError):
         mp.apply_mask(pnp.ones((size - 1, size)))
     mp.mask[1] = True
     result = mp.apply_mask(pnp.ones((size, ), dtype=bool))
     assert pnp.sum(mp.mask) == 1
     assert pnp.sum(result) == size - 1
コード例 #12
0
ファイル: main.py プロジェクト: cirKITers/masKIT
def init_parameters(
    layers: int,
    current_layers: int,
    wires: int,
    default_value: Optional[float],
    dynamic_parameters: bool = True,
    mask_type: Type[Mask] = DropoutMask,
) -> MaskedCircuit:
    params_uniform = np.random.uniform(low=-np.pi,
                                       high=np.pi,
                                       size=(current_layers, wires))
    params_zero = np.zeros((layers - current_layers, wires))
    params_combined = np.concatenate((params_uniform, params_zero))
    mc = MaskedCircuit.full_circuit(
        parameters=params_combined,
        layers=layers,
        wires=wires,
        default_value=default_value,
        entangling_mask=DropoutMask(shape=(layers, wires - 1)),
        dynamic_parameters=dynamic_parameters,
        mask_type=mask_type,
    )
    mc.mask(Axis.LAYERS, mask_type=mask_type)[current_layers:] = True
    return mc
コード例 #13
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_setting(self):
     size = 3
     mp = DropoutMask((size, ))
     assert mp
     assert len(mp.mask) == mp.mask.size
     assert pnp.sum(mp.mask) == 0
     mp[1] = True
     assert mp[1] == True  # noqa: E712
     with pytest.raises(IndexError):
         mp[size] = True
     assert pnp.sum(mp.mask) == 1
     mp.clear()
     assert pnp.sum(mp.mask) == 0
     mp[:] = True
     result = mp[:]
     assert len(result) == size
     assert pnp.all(result)
     assert pnp.sum(mp.mask) == size
     mp.clear()
     with pytest.raises(IndexError):
         mp[1, 2] = True
コード例 #14
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_negative_perturbation(self):
     mp = DropoutMask((3, ))
     with pytest.raises(AssertionError):
         mp.perturb(amount=-1)
コード例 #15
0
ファイル: test_masks.py プロジェクト: cirKITers/masKIT
 def test_wrong_mode(self):
     mp = DropoutMask((3, ))
     with pytest.raises(NotImplementedError):
         mp.perturb(mode=10, amount=1)
コード例 #16
0
    def test_init(self):
        mp = self._create_circuit(3)
        assert mp
        assert len(mp.mask(Axis.WIRES)) == 3
        assert len(mp.mask(Axis.LAYERS)) == 3
        assert mp.mask(Axis.PARAMETERS).shape == (3, 3)

        size = 3
        with pytest.raises(AssertionError):
            MaskedCircuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size - 1,
                wires=size,
            )
        with pytest.raises(AssertionError):
            MaskedCircuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size + 1,
                wires=size,
            )
        with pytest.raises(AssertionError):
            MaskedCircuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size,
                wires=size - 1,
            )
        with pytest.raises(AssertionError):
            MaskedCircuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size,
                wires=size + 1,
            )
        with pytest.raises(AssertionError):
            MaskedCircuit.full_circuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size,
                wires=size,
                entangling_mask=DropoutMask(shape=(size + 1, size)),
            )
        with pytest.raises(NotImplementedError):
            MaskedCircuit(
                parameters=pnp.random.uniform(low=0, high=1,
                                              size=(size, size)),
                layers=size,
                wires=size,
                masks=[(Axis.ENTANGLING, DropoutMask)],
            )
        mc = MaskedCircuit.full_circuit(
            parameters=pnp.random.uniform(low=0, high=1, size=(size, size)),
            layers=size,
            wires=size,
            wire_mask=DropoutMask(shape=(size, ),
                                  mask=pnp.ones((size, ), dtype=bool)),
        )
        assert pnp.array_equal(mc.mask(Axis.WIRES),
                               pnp.ones((size, ), dtype=bool))