In[]:=
QuantumCircuitOperator[{"0","H"}]
Out[]=
In[]:=
QuantumCircuitOperator["H"]["TensorNetwork"]
Out[]=
In[]:=
TensorNetworkIndexGraph@QuantumCircuitOperator["H"]["TensorNetwork"]
Out[]=
M
ij
A
kl
∑
j
M
ij
A
jk
abcde
T
ijk
M.A
In[]:=
circuit=QuantumCircuitOperator["CHSH"[p]][[;;-5]]
Out[]=
In[]:=
net=circuit["TensorNetwork",EdgeLabels->"EdgeTag"]
Out[]=
In[]:=
TensorNetworkIndexGraph[net]
Out[]=
In[]:=
TensorNetworkTensors[net]
Out[]=
SparseArray,SparseArray,SparseArray,SparseArray,SparseArray,SparseArray,SparseArray
In[]:=
TensorNetworkIndices[net]
Out[]=
{,},{},{},{,},{,,,},{,},,,,
1
1
4
1
2
2
3
3
1
4
4
1
1
5
2
5
5
1
5
2
4
6
6
4
3
7
4
7
7
3
7
4
In[]:=
TensorNetworkContractionPath[net]
Out[]=
{{2,5},{2,5},{2,4},{2,3},{1,3},{1,2}}
In[]:=
ContractTensorNetwork[net]
Out[]=
SparseArray
In[]:=
circuit[]["StateTensor"]
Out[]=
SparseArray
In[]:=
nn=NetFlatten@TensorNetworkNetGraph[net]
Out[]=
NetGraph
In[]:=
nn[.3]
Out[]=
{{{{0.284552,0.209833},{0.349583,0.0528344}},{{0.349583,-0.0528344},{0.209833,0.284552}}},{{{0.209833,-0.284552},{-0.0528344,0.349583}},{{0.0528344,0.349583},{0.284552,-0.209833}}}}
In[]:=
Normal@ContractTensorNetwork[net]
Out[]=
Cos+Sin,Cos-Sin,,,-++,--+-,-,+,Cos-Sin,-Cos-Sin,-,,-+++,-++,+,
1
4
p
2
1
4
p
2
1
4
p
2
1
4
p
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
Cos
p
2
2
2
Sin
p
2
2
2
2
Cos
p
2
2
2
Sin
p
2
2
2
2
1
4
p
2
1
4
p
2
1
4
p
2
1
4
p
2
Sin
p
2
2
2
Cos
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
1
2
Cos
p
2
2
2
Sin
p
2
2
2
Cos
p
2
2
2
Sin
p
2
2
2
2
-+
Cos
p
2
2
2
Sin
p
2
2
2
2
In[]:=
%/.p->.3
Out[]=
{{{{0.284552,0.209833},{0.349583,0.0528344}},{{0.349583,-0.0528344},{0.209833,0.284552}}},{{{0.209833,-0.284552},{-0.0528344,0.349583}},{{0.0528344,0.349583},{0.284552,-0.209833}}}}
In[]:=
FunctionCompile[Function[Typed[p,"Real64"],{{p,0},{1-p,1}}]]