@@ -161,3 +161,51 @@ Base.:(==)(b1::T, b2::T) where T<:SumBasis = equal_shape(b1.shape, b2.shape)
161161Base.:(== )(b1:: SumBasis , b2:: SumBasis ) = false
162162Base. length (b:: SumBasis ) = sum (b. shape)
163163# TODO how should `.bases` be accessed? `getindex` or a `sumbases` method?
164+
165+ # #
166+ # Operator Bases
167+ # #
168+
169+ """
170+ KetBraBasis(BL,BR)
171+
172+ Typical "Ket-Bra" outter-product Basis.
173+ TODO: write more...
174+ """
175+ struct KetBraBasis <: Basis
176+ left:: Basis
177+ right:: Basis
178+ end
179+ KetBraBasis (b:: Basis ) = KetBraBasis (b,b)
180+ basis_l (b:: KetBraBasis ) = b. left
181+ basis_r (b:: KetBraBasis ) = b. right
182+ Base.:(== )(b1:: KetBraBasis , b2:: KetBraBasis ) = (b1. left == b2. left && b1. right == b2. right)
183+ Base. length (b:: KetBraBasis ) = length (b. left)* length (b. right)
184+ Base. size (b:: KetBraBasis ) = (length (b. left), length (b. right))
185+
186+ struct ChoiRefSysBasis <: Basis
187+ basis:: Basis
188+ end
189+ Base.:(== )(b1:: ChoiRefSysBasis , b2:: ChoiRefSysBasis ) = (b1. basis == b2. basis)
190+ Base. length (b:: ChoiRefSysBasis ) = length (b. basis)
191+ Base. size (b:: ChoiRefSysBasis ) = (length (b. basis),)
192+
193+ struct ChoiOutSysBasis <: Basis
194+ basis:: Basis
195+ end
196+ Base.:(== )(b1:: ChoiOutSysBasis , b2:: ChoiOutSysBasis ) = (b1. basis == b2. basis)
197+ Base. length (b:: ChoiOutSysBasis ) = length (b. basis)
198+ Base. size (b:: ChoiOutSysBasis ) = (length (b. basis),)
199+
200+
201+ """
202+ _PauliBasis()
203+
204+ Pauli operator basis consisting of I, Z, X, Y, in that order.
205+ """
206+ struct _PauliBasis <: Basis
207+ end
208+
209+ Base.:(== )(pb1:: _PauliBasis , pb2:: _PauliBasis ) = true
210+ Base. length (b:: _PauliBasis ) = 4
211+ Base. size (b:: _PauliBasis ) = (4 ,)
0 commit comments