tangle.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // The outward facing API for Tangle
  2. #ifndef __TANGLE_H
  3. #define __TANGLE_H
  4. #include <complex.h>
  5. // Common Types
  6. typedef float _Complex cfloat;
  7. typedef long long int llint;
  8. #define cfloat(r, i) ((float)(r) + ((float)(i)) * I)
  9. // Tangle Types
  10. typedef struct
  11. {
  12. int rank;
  13. int nodes;
  14. } TangleEnvironment;
  15. typedef struct
  16. {
  17. int num_qubits;
  18. cfloat *amps;
  19. // Distributed Information
  20. int rank;
  21. int nodes;
  22. int k;
  23. int m;
  24. llint node_amps;
  25. llint temp_amps;
  26. } TangleState;
  27. typedef struct
  28. {
  29. cfloat A;
  30. cfloat B;
  31. cfloat C;
  32. cfloat D;
  33. } TangleGate;
  34. // Environment/Distributed Functions
  35. TangleEnvironment initialize_environment();
  36. void destroy_environment(TangleEnvironment env);
  37. // Quantum State Functions
  38. TangleState create_state(int num_qubits, TangleEnvironment env);
  39. void print_state(TangleState state);
  40. // Quantum Gates
  41. void apply_gate(TangleState state, int target, TangleGate u);
  42. void apply_diagonal_gate(TangleState state, int target, TangleGate u);
  43. void apply_antidiagonal_gate(TangleState state, int target, TangleGate u);
  44. void apply_controlled_gate(TangleState state, int control, int target, TangleGate u);
  45. void apply_controlled_diagonal_gate(TangleState state, int control, int target, TangleGate u);
  46. void apply_controlled_antidiagonal_gate(TangleState state, int control, int target, TangleGate u);
  47. TangleGate _X;
  48. TangleGate _Z;
  49. TangleGate _H;
  50. void X(TangleState state, int target);
  51. void H(TangleState state, int target);
  52. void Z(TangleState state, int target);
  53. void CZ(TangleState state, int control, int target);
  54. void CX(TangleState state, int control, int target);
  55. // Measurement
  56. llint measure(TangleState state);
  57. #endif