Package: taichi-q
Taichi-QQuantum Computation Simulator Engine Based on Taichi (available for both GPU and CPU)This is a Hackathon Project, Project Introduction availablehereIntallation (only support windows right now)From PyPIpipinstalltaichi-qpip3installtaichi-qUsageImport the Packages# Requiredfromtaichi_qimportEngine,Gate# OptionalimportnumpyasnpimporttaichiastiSetup Simulator EngineWarning!!Simulator Engine could only be initialized once.For CPUeng=Engine(num_qubits=3,state_init=0,device='cpu')For GPUeng=Engine(num_qubits=3,state_init=0,device='gpu')Initialize QubitsAll $|0\rangle$ or $|1\rangle$eng=Engine(num_qubits=3,state_init=0,device='cpu')eng=Engine(num_qubits=3,state_init=1,device='cpu')Choose $|0\rangle$ or $|1\rangle$ of each qubit with list/tuple/ndarrayeng=Engine(num_qubits=3,state_init=[0,1,0],device='gpu')eng=Engine(num_qubits=3,state_init=(0,1,0),device='gpu')eng=Engine(num_qubits=3,state_init=np.array([0,1,0]),device='gpu')Set complex qubit state with np.array(dtype=complex)eng=Engine(num_qubits=3,state_init=[[-1/np.sqrt(2),j/np.sqrt(2)],[1,0],[0,1]],device='cpu')Quantum Gate OperatorsQuantum Gates could be found intaichi_q.gates. Support $H(), X(), Y(), Z(), S(), T(), swap()$
$U(\theta, \phi, \lambda), R_x(\theta), R_y(\theta), R_z(\theta)$
$QFT(n), iQFT(n)$, and all controlled gates.Apply single-qubit gate to target qubit (e.g. H)eng.Ops(Gate.H(),[0])Apply muti-qubit gate to target qubits (e.g. swap)eng.Ops(Gate.swap(),[0,1])Apply controlled-qubit gate to target qubits (e.g. CNOT=CX)eng.Ops(Gate.X(),[0],[1])If you want to print Operated Gate, Tgt and Ctl on the terminaleng.Ops(Gate.QFT(4),[0,1,2,3],[4],print_output=True)# Output:# OPS: QFT  Tgt: [0,1,2,3]   Ctl [4]Measure the result of a qubitNotice!Measure is an irreversible process. State of the measured qubit would collapsed into $|0\rangle$ or $|1\rangle$q0_result=eng.Measure(0)Check the state of all qubits without measuring any qubitNotice!This is a cheating method from simulator. It's not available for real quantum computer.Check the state of all qubits is useful for quantum computation algorithm design and debug.Print all qubit stateseng.State_Check(print_state=True)# Output:# Q: (0, 0, 0)   State:[+0.0000+0.0000j]   P:0.0000# Q: (0, 0, 1)   State:[+0.0000+0.0000j]   P:0.0000# Q: (0, 1, 0)   State:[+0.0000+0.0000j]   P:0.0000# Q: (0, 1, 1)   State:[+0.0000+0.0000j]   P:0.0000# Q: (1, 0, 0)   State:[+0.0000+0.0000j]   P:0.0000# Q: (1, 0, 1)   State:[+0.0000+0.0000j]   P:0.0000# Q: (1, 1, 0)   State:[-0.4472+0.0000j]   P:0.2000# Q: (1, 1, 1)   State:[+0.0000+0.8944j]   P:0.8000Display Box-plot of qubit state probabilityeng.State_Check(plot_state=True)Print Quantum CircuitQuantum Gates and its order are recorded by the engine, and could be displayed on the terminal.eng.circuit_print()# Output:# Q0 →|' ' ' ' '■' 'H' 'M' ' ' ' ' '■'|→ Q0# Q1 →|'H' '■' 'X' ' ' ' ' 'M' '■' ' '|→ Q1# Q2 →|' ' 'X' ' ' ' ' ' ' ' ' 'X' 'Z'|→ Q2Visualize Quantum Circuit (with ti.GUI)The circuit visualization provides a more elegant approach for circuit visualization, based on ti.GUI.eng.circuit_visualize()ExamplesGenerate Bell-StateQuantum TeleportationGrover Searching AlgorithmDevelopmentWelcome any contribution!LicenseApach-2.0