@@ -8,22 +8,52 @@ struct TableauSimulator <: MonitoredQuantumCircuits.Simulator
88 state:: QC.MixedDestabilizer{QC.Tableau{Vector{UInt8},Matrix{UInt64}}}
99 operator:: QC.PauliOperator{Array{UInt8,0},Vector{UInt64}}
1010 measurements:: BitVector
11- function TableauSimulator (qubits:: Integer ; mixed= true , basis= :Z )
11+ measured_qubits:: Vector{Int64}
12+ ancillas:: Int64
13+ function TableauSimulator (qubits:: Integer ; ancillas= 0 , mixed= true , basis= :Z )
1214 if mixed
1315 state = QC. MixedDestabilizer (zero (QC. Stabilizer, qubits))
1416 operator = QC. zero (QC. PauliOperator, qubits)
15- new (state, operator, falses (0 ))
17+ new (state, operator, falses (0 ), Int64[], ancillas )
1618 else
1719 state = QC. MixedDestabilizer (one (QC. Stabilizer, qubits; basis))
1820 operator = QC. zero (QC. PauliOperator, qubits)
19- new (state, operator, falses (0 ))
21+ new (state, operator, falses (0 ), Int64[], ancillas )
2022 end
2123 end
2224end
2325function setInitialState! (sim:: TableauSimulator , state:: QC.MixedDestabilizer )
24- sim. initial_state. tab. phases .= state. tab. phases
25- sim. initial_state. tab. xzs .= state. tab. xzs
26- sim. initial_state. rank = state. rank
26+ sim. state. tab. phases .= state. tab. phases
27+ sim. state. tab. xzs .= state. tab. xzs
28+ sim. state. rank = state. rank
29+ end
30+ function aux (backend:: TableauSimulator )
31+ return backend. state. tab. nqubits + backend. ancillas + 1
32+ end
33+
34+ function MonitoredQuantumCircuits. reset! (backend:: TableauSimulator ; mixed= true , basis= :Z )
35+ qubits = backend. state. tab. nqubits
36+ # ? maybe this can be done in place
37+ if mixed
38+ state = QC. MixedDestabilizer (zero (QC. Stabilizer, qubits))
39+ else
40+ state = QC. MixedDestabilizer (one (QC. Stabilizer, qubits; basis))
41+ end
42+ setInitialState! (backend, state)
43+ empty! (backend. measurements)
44+ empty! (backend. measured_qubits)
45+ return backend
46+ end
47+
48+ function Base. show (io:: IO , backend:: TableauSimulator )
49+ println (io, " TableauSimulator Backend powerd by QuantumClifford.jl" )
50+ println (io, " Number of qubits: " , backend. state. tab. nqubits)
51+ println (io, " Number of ancillas: " , backend. ancillas)
52+ if ! isempty (backend. measurements)
53+ println (io, " Recorded measurements: " , length (backend. measurements))
54+ else
55+ println (io, " No measurements recorded." )
56+ end
2757end
2858
2959"""
@@ -49,10 +79,10 @@ function MonitoredQuantumCircuits.execute(simulator::TableauSimulator)
4979 return simulator. state, simulator. measurements
5080end
5181
52- function MonitoredQuantumCircuits. executeParallel (circuit:: MonitoredQuantumCircuits.CompiledCircuit , simulator:: TableauSimulator ; samples= 1 )
53- MPI, rank, size = MonitoredQuantumCircuits. get_mpi_ref ()
54- Threads. @threads for i in 1 : samples÷ size
55- MonitoredQuantumCircuits. execute (circuit, simulator)
82+ # function MonitoredQuantumCircuits.executeParallel(circuit::MonitoredQuantumCircuits.CompiledCircuit, simulator::TableauSimulator; samples=1)
83+ # MPI, rank, size = MonitoredQuantumCircuits.get_mpi_ref()
84+ # Threads.@threads for i in 1:samples÷size
85+ # MonitoredQuantumCircuits.execute(circuit, simulator)
5686
57- end
58- end
87+ # end
88+ # end
0 commit comments