Skip to content

Commit 314c0bf

Browse files
Fe-r-ozKrastanov
andauthored
introducing doctests for tensor methods and inv (#326)
--------- Co-authored-by: Stefan Krastanov <[email protected]>
1 parent 1fb1783 commit 314c0bf

File tree

1 file changed

+120
-2
lines changed

1 file changed

+120
-2
lines changed

src/linalg.jl

Lines changed: 120 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22
$TYPEDSIGNATURES
33
44
Inverse of a `CliffordOperator`
5+
6+
```jldoctest
7+
julia> inv(CliffordOperator(sCNOT))
8+
X₁ ⟼ + XX
9+
X₂ ⟼ + _X
10+
Z₁ ⟼ + Z_
11+
Z₂ ⟼ + ZZ
12+
13+
julia> inv(CliffordOperator(sCNOT(2, 1), 2))
14+
X₁ ⟼ + X_
15+
X₂ ⟼ + XX
16+
Z₁ ⟼ + ZZ
17+
Z₂ ⟼ + _Z
18+
19+
julia> inv(CliffordOperator(tHadamard))
20+
X₁ ⟼ + Z
21+
Z₁ ⟼ + X
22+
```
523
"""
624
function LinearAlgebra.inv(c::CliffordOperator; phases=true)
725
ci = zero(c)
@@ -24,6 +42,16 @@ end
2442
2543
Based on [garcia2012efficient](@cite).
2644
45+
```jldoctest
46+
julia> using LinearAlgebra
47+
48+
julia> dot(S"Z", S"Z")
49+
1.0
50+
51+
julia> dot(S"Z", S"Y")
52+
0.7071067811865476
53+
```
54+
2755
See also: [`logdot`](@ref)"""
2856
function LinearAlgebra.dot(s1::AbstractStabilizer, s2::AbstractStabilizer)
2957
ld = logdot(s1,s2)
@@ -83,14 +111,104 @@ trusted_rank(s::Destabilizer) = length(s)
83111
trusted_rank(s::MixedStabilizer) = LinearAlgebra.rank(s)
84112
trusted_rank(s::MixedDestabilizer) = LinearAlgebra.rank(s)
85113

86-
"""Tensor product between operators or tableaux. See also [`tensor_pow`](@ref)."""
114+
"""Tensor product between operators or tableaux.
115+
116+
Tensor product between CiffordOperators:
117+
118+
```jldoctest
119+
julia> tensor(CliffordOperator(sCNOT), CliffordOperator(sCNOT))
120+
X₁ ⟼ + XX__
121+
X₂ ⟼ + _X__
122+
X₃ ⟼ + __XX
123+
X₄ ⟼ + ___X
124+
Z₁ ⟼ + Z___
125+
Z₂ ⟼ + ZZ__
126+
Z₃ ⟼ + __Z_
127+
Z₄ ⟼ + __ZZ
128+
```
129+
130+
Tensor product between PauliOperators:
131+
132+
```jldoctest
133+
julia> tensor(P"-IXYZ", P"iIXYZ")
134+
-i_XYZ_XYZ
135+
```
136+
137+
Tensor product between Tableaux:
138+
139+
```jldoctest
140+
julia> s = S"-XX
141+
+ZZ";
142+
143+
julia> tensor(s, s, s)
144+
- XX____
145+
+ ZZ____
146+
- __XX__
147+
+ __ZZ__
148+
- ____XX
149+
+ ____ZZ
150+
151+
julia> s = S"+XZI
152+
-IZI";
153+
154+
julia> tensor(s, s)
155+
+ XZ____
156+
- _Z____
157+
+ ___XZ_
158+
- ____Z_
159+
```
160+
161+
See also [`tensor_pow`](@ref)."""
87162
function tensor end
88163

89164
function tensor(ops::AbstractStabilizer...) # TODO optimize this by doing conversion to common type to enable preallocation
90165
foldl(, ops[2:end], init=ops[1])
91166
end
92167

93-
"""Repeated tensor product of an operators or a tableau. See also [`tensor`](@ref)."""
168+
"""Repeated tensor product of an operators or a tableau.
169+
170+
For `CliffordOperator`:
171+
172+
```jldoctest
173+
julia> tensor_pow(CliffordOperator(sHadamard), 3)
174+
X₁ ⟼ + Z__
175+
X₂ ⟼ + _Z_
176+
X₃ ⟼ + __Z
177+
Z₁ ⟼ + X__
178+
Z₂ ⟼ + _X_
179+
Z₃ ⟼ + __X
180+
```
181+
182+
For `PauliOperator`:
183+
184+
```jldoctest
185+
julia> tensor_pow(P"IXYZ", 2)
186+
+ _XYZ_XYZ
187+
```
188+
189+
For `Tableaux`:
190+
191+
```jldoctest
192+
julia> tensor_pow(S"Z", 4)
193+
+ Z___
194+
+ _Z__
195+
+ __Z_
196+
+ ___Z
197+
198+
julia> s = S"+XZI
199+
+IZI";
200+
201+
julia> tensor_pow(s, 3)
202+
+ XZ_______
203+
+ _Z_______
204+
+ ___XZ____
205+
+ ____Z____
206+
+ ______XZ_
207+
+ _______Z_
208+
```
209+
210+
See also [`tensor`](@ref).
211+
"""
94212
function tensor_pow(op::Union{<:AbstractStabilizer,<:AbstractCliffordOperator},power)
95213
if power==1
96214
return op

0 commit comments

Comments
 (0)