def test_combine(self) -> None: dimension = 2 t = Unitary(dimension, np.array([[1, 0], [0, np.exp(1j * np.pi / 4)]])) t_entry = UnitarySequenceEntry(t, [0]) sequence_1 = UnitarySequence(dimension, np.repeat(t_entry, 3)) sequence_2 = UnitarySequence( dimension, [UnitarySequenceEntry(UnitaryDefinitions.sigmay(), [0])]) combined_sequence = UnitarySequence.combine(sequence_1, sequence_2) assert (combined_sequence.get_length() == sequence_1.get_length() + sequence_2.get_length()) assert combined_sequence.product().close_to( sequence_1.product().left_multiply(sequence_2.product()))
def test_append_and_remove(self) -> None: dimension = 2 identity = Unitary.identity(dimension) sequence = UnitarySequence(dimension) assert sequence.get_length() == 0 assert sequence.product().close_to(identity) sequence.append_first( UnitarySequenceEntry(UnitaryDefinitions.sigmax(), [0])) assert sequence.get_length() == 1 assert sequence.product().close_to(UnitaryDefinitions.sigmax()) sequence.append_last( UnitarySequenceEntry(UnitaryDefinitions.sigmay(), [0])) assert sequence.get_length() == 2 assert sequence.product().close_to(UnitaryDefinitions.sigmaz()) sequence.append_first( UnitarySequenceEntry(UnitaryDefinitions.sigmaz(), [0])) assert sequence.get_length() == 3 assert sequence.product().close_to(identity) sequence.remove_last() assert sequence.get_length() == 2 assert sequence.product().close_to(UnitaryDefinitions.sigmay()) sequence.remove_first() assert sequence.get_length() == 1 assert sequence.product().close_to(UnitaryDefinitions.sigmax()) sequence.remove_first() assert sequence.get_length() == 0 assert sequence.product().close_to(identity)
def test_identity_roots_incorrect(self) -> None: dimension = 2 t = Unitary(dimension, np.array([[1, 0], [0, np.exp(1j * np.pi / 4)]])) t_entry = UnitarySequenceEntry(t, [0]) sequence = UnitarySequence(dimension, np.repeat(t_entry, 7)) assert sequence.get_dimension() == dimension assert sequence.get_length() == 7 assert not sequence.product().close_to(np.identity(dimension))
def test_undo(self) -> None: dimension = 2 identity = Unitary.identity(dimension) sequence = UnitarySequence(dimension) assert sequence.get_length() == 0 with pytest.raises(Exception): sequence.undo() sequence.append_first( UnitarySequenceEntry(UnitaryDefinitions.sigmax(), [0])) assert sequence.get_length() == 1 assert sequence.product().close_to(UnitaryDefinitions.sigmax()) sequence.undo() assert sequence.get_length() == 0 assert sequence.product().close_to(identity) with pytest.raises(Exception): sequence.undo() sequence.append_first( UnitarySequenceEntry(UnitaryDefinitions.sigmay(), [0])) sequence.append_first( UnitarySequenceEntry(UnitaryDefinitions.sigmay(), [0])) assert sequence.get_length() == 2 assert sequence.product().close_to(identity) sequence.remove_last() assert sequence.get_length() == 1 assert sequence.product().close_to(UnitaryDefinitions.sigmay()) sequence.undo() assert sequence.get_length() == 2 assert sequence.product().close_to(identity) with pytest.raises(Exception): sequence.undo()