Distributed Quantum Gates - Primitive Protocols

netQuil.distributedGates.cat_entangler(control, targets, entangled=False, notify=False)[source]

Performs the cat entangler, one of two primitive operations for distributed quantum computing which can be used to implement non-local operations. Projects the state of Alice’s local control bit (psi) on entangled qubits owned by other Agents, allowing Agents to effectively use Alice’s qubit as a control for their own operations. Measurements are stored in ro in the position corresponding to qubit’s index (i.e. ith qubit measured into ro[i]). Once the cat_entangler is started in the control agent, each target agent waits until they have received two classical bits from the control. The first is a placeholder for a measurement and the second indicates that the cat entangler is complete. e.g. non-local CNOTs, non-local controlled gates, and teleportation.

Remember, the cat_disentangler sends classical bits between the control and targets, so be careful when trying to perform similar operations in parallel!

Parameters
  • control (agent,int,int,register) – tuple of agent owning phi, phi, measurement qubit, and register for measurements

  • targets (List<agent,qubit>) – list of tuples of agent and agent’s qubit that will be altered

  • entangled (Boolean) – true if qubits from other Agents are already maximally entangled

  • notify (Boolean) – if true control agent will send cbit equaling 1 to all target agents, signaling completion

netQuil.distributedGates.cat_disentangler(control, targets, notify=False)[source]

Performs the cat disentangler, second of two primitive operations for distributed quantum computing which can be used to implement non-local operations. Restores all qubits to state before cat_entangler was performed. Measurements are stored in ro in the position corresponding to qubit’s index (i.e ith qubit measured into ro[i])

Remember, the cat_disentangler sends classical bits between the control and targets, so be careful when trying to perform similar operations in parallel!

Parameters
  • control (agent,int,register) – tuple of agent owning phi, phi, and register to store measurments

  • targets (List<agent,qubit>) – list of tuples of agent and agent’s qubit that will be altered

  • notify (Boolean) – if true control agent will send cbit equaling 1 to all target agents, signaling completion

netQuil.distributedGates.QFT(program, register)[source]

Performs Quantum Fourier Transform.

Parameters
  • program (Program) – program for where to apply QFT

  • register (List) – register of qubits to perform QFT on

Returns

program where QFT has been applied