qadence 1.7.8__py3-none-any.whl → 1.9.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. qadence/__init__.py +1 -1
  2. qadence/analog/device.py +1 -1
  3. qadence/analog/parse_analog.py +1 -2
  4. qadence/backend.py +3 -3
  5. qadence/backends/gpsr.py +8 -2
  6. qadence/backends/horqrux/backend.py +3 -3
  7. qadence/backends/pulser/backend.py +21 -38
  8. qadence/backends/pulser/convert_ops.py +2 -2
  9. qadence/backends/pyqtorch/backend.py +85 -10
  10. qadence/backends/pyqtorch/config.py +10 -3
  11. qadence/backends/pyqtorch/convert_ops.py +245 -233
  12. qadence/backends/utils.py +9 -1
  13. qadence/blocks/abstract.py +1 -1
  14. qadence/blocks/embedding.py +21 -11
  15. qadence/blocks/matrix.py +3 -1
  16. qadence/blocks/primitive.py +37 -11
  17. qadence/circuit.py +1 -1
  18. qadence/constructors/__init__.py +2 -1
  19. qadence/constructors/ansatze.py +176 -0
  20. qadence/engines/differentiable_backend.py +3 -3
  21. qadence/engines/jax/differentiable_backend.py +2 -2
  22. qadence/engines/jax/differentiable_expectation.py +2 -2
  23. qadence/engines/torch/differentiable_backend.py +2 -2
  24. qadence/engines/torch/differentiable_expectation.py +2 -2
  25. qadence/execution.py +14 -16
  26. qadence/extensions.py +1 -1
  27. qadence/log_config.yaml +10 -0
  28. qadence/measurements/shadow.py +101 -133
  29. qadence/measurements/tomography.py +2 -2
  30. qadence/measurements/utils.py +4 -4
  31. qadence/mitigations/analog_zne.py +8 -7
  32. qadence/mitigations/protocols.py +2 -2
  33. qadence/mitigations/readout.py +14 -5
  34. qadence/ml_tools/__init__.py +4 -8
  35. qadence/ml_tools/callbacks/__init__.py +30 -0
  36. qadence/ml_tools/callbacks/callback.py +451 -0
  37. qadence/ml_tools/callbacks/callbackmanager.py +214 -0
  38. qadence/ml_tools/{saveload.py → callbacks/saveload.py} +11 -11
  39. qadence/ml_tools/callbacks/writer_registry.py +430 -0
  40. qadence/ml_tools/config.py +132 -258
  41. qadence/ml_tools/constructors.py +2 -2
  42. qadence/ml_tools/data.py +7 -3
  43. qadence/ml_tools/loss/__init__.py +10 -0
  44. qadence/ml_tools/loss/loss.py +87 -0
  45. qadence/ml_tools/models.py +7 -7
  46. qadence/ml_tools/optimize_step.py +45 -10
  47. qadence/ml_tools/stages.py +46 -0
  48. qadence/ml_tools/train_utils/__init__.py +7 -0
  49. qadence/ml_tools/train_utils/base_trainer.py +548 -0
  50. qadence/ml_tools/train_utils/config_manager.py +184 -0
  51. qadence/ml_tools/trainer.py +692 -0
  52. qadence/model.py +6 -6
  53. qadence/noise/__init__.py +2 -2
  54. qadence/noise/protocols.py +188 -36
  55. qadence/operations/control_ops.py +37 -22
  56. qadence/operations/ham_evo.py +88 -26
  57. qadence/operations/parametric.py +32 -10
  58. qadence/operations/primitive.py +61 -29
  59. qadence/overlap.py +0 -6
  60. qadence/parameters.py +3 -2
  61. qadence/transpile/__init__.py +2 -1
  62. qadence/transpile/noise.py +53 -0
  63. qadence/types.py +39 -3
  64. {qadence-1.7.8.dist-info → qadence-1.9.0.dist-info}/METADATA +5 -9
  65. {qadence-1.7.8.dist-info → qadence-1.9.0.dist-info}/RECORD +67 -63
  66. {qadence-1.7.8.dist-info → qadence-1.9.0.dist-info}/WHEEL +1 -1
  67. qadence/backends/braket/__init__.py +0 -4
  68. qadence/backends/braket/backend.py +0 -234
  69. qadence/backends/braket/config.py +0 -22
  70. qadence/backends/braket/convert_ops.py +0 -116
  71. qadence/ml_tools/printing.py +0 -153
  72. qadence/ml_tools/train_grad.py +0 -395
  73. qadence/ml_tools/train_no_grad.py +0 -199
  74. qadence/noise/readout.py +0 -218
  75. {qadence-1.7.8.dist-info → qadence-1.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,16 +1,16 @@
1
- qadence/__init__.py,sha256=0SFU1_XZ-3WlSU1rA4W1Y0edxpZLO_sNg-YnpjlD77w,2638
2
- qadence/backend.py,sha256=N27CRrmjkgFGhwdTJvdRKn2hKjuTwGM5t0QFzGEgvJA,13351
3
- qadence/circuit.py,sha256=3lQdjj_srxgk6f5M3eh3kE-Qdov4FA9TZxZZb0E1_mI,6966
1
+ qadence/__init__.py,sha256=c3y-Tbq_P4cbWKi7b45Z6zUFlnqgd8Q68OOpL2O2GOI,2671
2
+ qadence/backend.py,sha256=MigWAAroh_STGLg2qoQED9tDHmTo15uBbvFNz_oHy7A,13372
3
+ qadence/circuit.py,sha256=r8QvzLWHvavqLOlNstq8aHg6UpKmPClEDoZVBkk-tzY,6970
4
4
  qadence/decompose.py,sha256=C4LYia_GcC9Rx3QO0ZLWTI9dN63a8WTEAXO0ZVQWuiE,5221
5
5
  qadence/divergences.py,sha256=JhpELhWSnuDvQxa9hJp_DE3EQg2Ban-Ta0mHZ_fVrHg,1832
6
- qadence/execution.py,sha256=JNvN8RVxbbysm5CzS9fdp5LpyVaDpk84h-BkC-S0Wj8,9587
7
- qadence/extensions.py,sha256=ubLAtksnfq_crF-q_oa6xyL85xGCWT53hEa7Ycg5MDs,6094
6
+ qadence/execution.py,sha256=SoB5n8mRQ6mxY9JqnqrrU5hY-M72WQOpnZC25PBM_dA,9670
7
+ qadence/extensions.py,sha256=Fyj8WweDNbtZc6snZ2y7zLL-jBOvi7InMYElbC2gNmQ,6084
8
8
  qadence/libs.py,sha256=HetkKO8TCTlVCViQdVQJvxwBekrhd-y_iMox4UJMY1M,410
9
- qadence/log_config.yaml,sha256=WwSpxqMSXgPJ7wO_wh46UnFzXdgX9NVA4MbN3TcJFyE,485
9
+ qadence/log_config.yaml,sha256=QiwoB1bnRdk9NpxnvfgWX2PjN7EDfYlrc3GVD38rtdI,739
10
10
  qadence/logger.py,sha256=Hb76pK3VyQjVjJb4_NqFlOJgjYJVa8t7DHJFlzOM86M,407
11
- qadence/model.py,sha256=yc8Ck2LwCSyiNo57S1lUx6HROrKD95Bn1vVjwfQT4mw,21578
12
- qadence/overlap.py,sha256=v3XP3g7BaMoTjR0GVTqg7IDtAfq_Njo1ZNTeyo8uYNA,17089
13
- qadence/parameters.py,sha256=Oz30Sx-d8NLiiwo2FC-nWEHX6YCIZYOZwebNDA1HvmQ,12644
11
+ qadence/model.py,sha256=OH61_Ij_c7PRywiXf16tJ5mnK9iYNbBTdRiHeG8PZ54,21623
12
+ qadence/overlap.py,sha256=ekaUnIcQWdF4hSFuUWpRjaxo43JyDGFOayP7vMXCZpw,16821
13
+ qadence/parameters.py,sha256=RDYklyW5EQZTjsAazEXa4lLGDOdmUUU53hLj385uSaI,12687
14
14
  qadence/protocols.py,sha256=bcYTxSjgMPV-a-D6yv90jCpnGik8myzaNpFv9z1gzJ0,442
15
15
  qadence/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  qadence/qubit_support.py,sha256=Nkn1Q01RVViTcggSIom7EFKdWpAuM4TMGwBZ5feCUxA,2120
@@ -18,52 +18,48 @@ qadence/register.py,sha256=mwmvS6PcTY0F9cIhTUXG3NT73FIagfMCwVqYa4DrQrk,13001
18
18
  qadence/serial_expr_grammar.peg,sha256=z5ytL7do9kO8o4h-V5GrsDuLdso0KsRcMuIYURFfmAY,328
19
19
  qadence/serialization.py,sha256=qEET6Gu9u2aSibPve3bJrqDzK2_gO3RPDJjt4ZY8GbE,15596
20
20
  qadence/states.py,sha256=5QIOBBYs8e2uLFiMa8iMYZ-MvWIFEqkZAjNYx0SyYPI,14843
21
- qadence/types.py,sha256=0LsNElAjnjR8jDhIyilAg9lVQgKfDGpEnj5R6FdSqE0,11054
21
+ qadence/types.py,sha256=NR1dnN4tKC3zL1KEzjs2p_IYVth7GctgXVbIJsuiUws,11992
22
22
  qadence/utils.py,sha256=zb2j7wURfy8kazaS84r4t35vAeDpo4Tpm4HbmPH-kFA,9865
23
23
  qadence/analog/__init__.py,sha256=BCyS9R4KUjzUXN0Ax3b0eMo8ZAuSkGoJQVtZ4_pvAFs,279
24
24
  qadence/analog/addressing.py,sha256=GSt4heEmRkBmoQIgdgkTclEFxZY-jjuAd77_SsZtGdI,6513
25
25
  qadence/analog/constants.py,sha256=B2phQoN1ASL8CwM-Dsa1rbraYwGwwPSeiB3HbVe-MPA,1243
26
- qadence/analog/device.py,sha256=RmPXWxq77pJXzvV6CIVSUVxxy-oKd6SqoSnQESNLIqg,2412
26
+ qadence/analog/device.py,sha256=LK8rQYBiK_PWHezLfTL0Ig83yc5wQPmZ3rBZF-gWgYw,2416
27
27
  qadence/analog/hamiltonian_terms.py,sha256=9LKidqqEMJTTdXeaxkxP_otTmcv9i4yeJ-JKCLOCK3Y,3421
28
- qadence/analog/parse_analog.py,sha256=ppvMZtsKXOIkIehCgjbdmG9n232DIycSanyuyVth5Wg,4223
28
+ qadence/analog/parse_analog.py,sha256=9Y_LMdw4wCHH6YSkvHhs6PUNwzT14HS7cUGheNSmDQg,4168
29
29
  qadence/backends/__init__.py,sha256=ibm7wmZxuIoMYAQxgAx0MsfLYWOVHNWgLwyS1HjMuuI,215
30
30
  qadence/backends/api.py,sha256=NPrvtZQ4klUBabUWJ5hbTUCVoaoW9-sHVbiXxAnTt3A,2643
31
- qadence/backends/gpsr.py,sha256=3lcOHgt0soCiDXAyZ8DVyS8dMgUypIPwkDADds2boSE,5371
31
+ qadence/backends/gpsr.py,sha256=HW5m6iHLq3hLHdJoU1q1i1laR0hBs7uCniXqrsFoNCI,5616
32
32
  qadence/backends/jax_utils.py,sha256=VfKhqCKknHDWZO21UFipWH_Lkiq175Z5GkP49gWjbyw,5038
33
- qadence/backends/utils.py,sha256=7gWiV_yJH3yyGFxwt-AQLEMLYkBX8aThvmFUlF0M2R0,8302
34
- qadence/backends/braket/__init__.py,sha256=eruyDZKMqkh1LE7eJ980vcrLJbia35uUX6krAP78clI,121
35
- qadence/backends/braket/backend.py,sha256=HNqs4ASB1wgIaInBNifC83GDsXOfz8s6FIIvP4aY9IM,8481
36
- qadence/backends/braket/config.py,sha256=7cu22dmYdp48Fu760HPfxBHinaUnGmzx9MkE_EPhVN8,594
37
- qadence/backends/braket/convert_ops.py,sha256=DVXV7sT9sX_yGOgPKclD9KIGgmbBRuDy_e39i1Z8I1s,3417
33
+ qadence/backends/utils.py,sha256=SdeAf6BDayc-W9hPI271PKtJ_ROOzRry9Jw72wUGmm4,8565
38
34
  qadence/backends/horqrux/__init__.py,sha256=0OdVy6cq0oQggV48LO1WXdaZuSkDkz7OYNEPIkNAmfk,140
39
- qadence/backends/horqrux/backend.py,sha256=9BqJP_av_cyLtIw07ri8gwoOXLz3b2yCzm9CmP36ZWw,8821
35
+ qadence/backends/horqrux/backend.py,sha256=KNFFGN9dsgB9QKtNXiP3LyMY9DQ-7W7ScyE6k29fHJY,8842
40
36
  qadence/backends/horqrux/config.py,sha256=xz7JlUcwW_4JAbvProbSI9hA1SXZRRAN0Hr2bvmLzfg,892
41
37
  qadence/backends/horqrux/convert_ops.py,sha256=3uG3yLq5wjfrWzFHDs0HEnd8kER91ZHVX3HCpYjOdjk,8565
42
38
  qadence/backends/pulser/__init__.py,sha256=capQ-eHqwtOeLf4mWsI0BIseAHhiLGie5cFD4-iVhUo,116
43
- qadence/backends/pulser/backend.py,sha256=bALJrLH4ZyJ24ehxilRat1LdFL7cwIpF7MSjHTXhPZQ,15621
39
+ qadence/backends/pulser/backend.py,sha256=kNo_AAvOPNevdiMbZnQlEUbWCO-NXcwUtFWQHJ6VR2Q,14845
44
40
  qadence/backends/pulser/channels.py,sha256=ZF0yEXUFHAmi3IdeXjzdTNGR5NzaRRFTiUpUGVg2sO4,329
45
41
  qadence/backends/pulser/cloud.py,sha256=0uUluvbFV9sOuCPraE-9uiVtC3Q8QaDY1IJMDi8grDM,2057
46
42
  qadence/backends/pulser/config.py,sha256=aoHDmtgq5i0Zryxenw_p3uARY0B1w-UaYvfqDmrWHM0,2175
47
- qadence/backends/pulser/convert_ops.py,sha256=of8NCZwHX0zSisRo-sBRSyQVg841iFKLhUm6WWZGsCY,1800
43
+ qadence/backends/pulser/convert_ops.py,sha256=wyttkkjPimI0OOYERS4S4w1F2j270v5iRuV1cm6Siu0,1814
48
44
  qadence/backends/pulser/devices.py,sha256=DermLZNfmCB3SqteKVW4uhg4jp6ya1G6ptnXbBnJogI,2448
49
45
  qadence/backends/pulser/pulses.py,sha256=F4fExIRAhLPMtVg1bhNtDihUYHxu5RExGjovk8-CQIo,11884
50
46
  qadence/backends/pulser/waveforms.py,sha256=0uz95b7rUaUUtN0tuHBZmJ0H6UBmfHST_59ozwsRCzg,2227
51
47
  qadence/backends/pyqtorch/__init__.py,sha256=0OdVy6cq0oQggV48LO1WXdaZuSkDkz7OYNEPIkNAmfk,140
52
- qadence/backends/pyqtorch/backend.py,sha256=NG83pZBuL2eevIFxqioiWWBrmCMVNvcvnEAAo-gju3A,8907
53
- qadence/backends/pyqtorch/config.py,sha256=jK-if0OF6L_inP-oZhWI4-b8wcrOiK8-EVv3NYDOfBM,2056
54
- qadence/backends/pyqtorch/convert_ops.py,sha256=PNn9TVXHWMGVyEpa8DqF1eJ4uSNAhZfuP9R_oT_fxOs,14314
48
+ qadence/backends/pyqtorch/backend.py,sha256=Sjuof9b332w4gk9o8Rso2rgSHxskexfkIazRfxRD0Ng,11458
49
+ qadence/backends/pyqtorch/config.py,sha256=sAxWVSkWvj6Lu0em1KJCDb6nfjqe8Dsxi7pyh6qYJpA,2387
50
+ qadence/backends/pyqtorch/convert_ops.py,sha256=QVlXAqqBPtBt2NuFU9mvEm5i7FWXg3gWqoeizlH-1_s,13401
55
51
  qadence/blocks/__init__.py,sha256=H6jEA_CptkE-eoB4UfSbUiDszbxxhZwECV_TgoZWXoU,960
56
- qadence/blocks/abstract.py,sha256=QFwKPagbTrn3V4c2DHpBd-QL_mVIUXfbvyBLUdD6zw4,12023
52
+ qadence/blocks/abstract.py,sha256=DSQUE71rMyRBwAP--4Tx1WQC_LCXaNlftjd7goGyrpQ,12027
57
53
  qadence/blocks/analog.py,sha256=ymnnlSVoW1XL05ZvnnHCqRTHuOXIEY_7E9M0PNKJZy4,10812
58
54
  qadence/blocks/block_to_tensor.py,sha256=Sg7YGKUoPUUHKvyB8Khztrk7UYnV5SD451_3I00n84w,17367
59
55
  qadence/blocks/composite.py,sha256=f9D8L3u5Ktu_-xDBWsWiPlY8I-YW5YFgU18BtqwFHK0,8937
60
- qadence/blocks/embedding.py,sha256=XC3_U4Dqi9jvU1TVbl2bZQJAGNL8Sww89eKOVLCsfiQ,6752
56
+ qadence/blocks/embedding.py,sha256=MA3vRt659A828ZnH-6q7SpFdzS8Cf0oTtA2DJIDHmx4,7043
61
57
  qadence/blocks/manipulate.py,sha256=kPmzej7mnWFoqTJA2CkGulT7hcPha0GGPARC8rjZltg,2387
62
- qadence/blocks/matrix.py,sha256=r1JqyD3kzspLq3aYbdVCNbWpjUJXmUx2c34luIo8Mcc,3947
63
- qadence/blocks/primitive.py,sha256=RoEA9_VCI_8o4yg_pMe5T38z3LD6IFz9qlCiF3iHmOo,16631
58
+ qadence/blocks/matrix.py,sha256=unE8mVWBTTcmSLX4le2fHqHFu4fbGeMTK8MrGoPsVRY,4036
59
+ qadence/blocks/primitive.py,sha256=GLruKpiFBStWVd_M9mzLr3MqDNPbyaMUzEVB6xV3cPQ,17657
64
60
  qadence/blocks/utils.py,sha256=_ggOmIesfmTtIeldUyiZrKyS5HT5i_R3ZS8ihBCw73E,17700
65
- qadence/constructors/__init__.py,sha256=oEGuILUB8qEbSeaKV9Q-Tk-DAVx-U0wqn8VoSztVueg,984
66
- qadence/constructors/ansatze.py,sha256=bTrcF2RsyA_Btmkk80tWxP1dn9fK_SXAQFueIuWkT-c,9660
61
+ qadence/constructors/__init__.py,sha256=HTVulUFol_RxdCI3Gn2CBKjJ6ue0ALOB6GUuibP0ONE,1000
62
+ qadence/constructors/ansatze.py,sha256=a7ZTYhfOat7fme_w_NFEUbZrMLSDMrkpu5RrablkeUU,14856
67
63
  qadence/constructors/feature_maps.py,sha256=BaAxFi6fSKwjsfFjqZ8T7lyZfjotcgH2OW3b0j67YVk,8644
68
64
  qadence/constructors/hamiltonians.py,sha256=u9feuuLmgQ7tX0TcP8tsbCefvBSVjkY7k4fMT5vp12Q,10054
69
65
  qadence/constructors/iia.py,sha256=z-4AA9Oj-j2oZ0QDkLYNk4duS3UHY_98Qwt9VO_ZDDU,7001
@@ -84,56 +80,64 @@ qadence/draw/assets/dark/measurement.svg,sha256=6ALGjaCX3xZ1NqB6RW6yzOchzZV-j8uk
84
80
  qadence/draw/assets/light/measurement.png,sha256=q6AMI7Lmb1O42sEzvSiK9ZtyTpXOGj-zIAh4FiPbhsk,278
85
81
  qadence/draw/assets/light/measurement.svg,sha256=kL424wtIEU7ihxecZnthyYnvHhNW_F75daoO9pBHNiw,7282
86
82
  qadence/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- qadence/engines/differentiable_backend.py,sha256=rrMA-54AC1wx4a1WFQKGZL_YIdgjoyvBGagT0H1bL1Y,5875
83
+ qadence/engines/differentiable_backend.py,sha256=o9fuXapvoWB4Rr0QsQP3YRFe1Wdq-Fhww0NUvWR7oqA,5896
88
84
  qadence/engines/jax/__init__.py,sha256=qcW09lcnblwRVQM6mDmW9su5kDVPe--buWCCuvPbOVM,223
89
- qadence/engines/jax/differentiable_backend.py,sha256=W5rDA8wb-ECnFWoLj4dVugF9v1lecC0t9FTLBWnw2vM,3062
90
- qadence/engines/jax/differentiable_expectation.py,sha256=poI--yV3srG3wndTcg6hk1lV63RYPJEQjypiWGzwqsk,3680
85
+ qadence/engines/jax/differentiable_backend.py,sha256=FcSrzzjzb0zfXC0-4mUJ6UB-wGO5RnNjQOGPAsM25zs,3076
86
+ qadence/engines/jax/differentiable_expectation.py,sha256=rn_l7IH-S4IvuAcyAIgyEuMZOIqswu5Nsfz0JffXjaE,3694
91
87
  qadence/engines/torch/__init__.py,sha256=iZFdD32ot0B0CVyC-f5dVViOBnqoalxa6M9Lj4WQuPE,160
92
- qadence/engines/torch/differentiable_backend.py,sha256=AWthwvKE8pCOih4dZ3tXxQX4W1ps9mBcvo7n4V9V24Y,3553
93
- qadence/engines/torch/differentiable_expectation.py,sha256=iaWpd4Y3e_rGKt-S0TNXqqSFg5z6I_5_ZIJxjQxd7Ow,10290
88
+ qadence/engines/torch/differentiable_backend.py,sha256=uQfyGg-25MAc0soK1FyvJ2FJakRuv5_5DOy7OPiZYg8,3567
89
+ qadence/engines/torch/differentiable_expectation.py,sha256=AXb1nLG1WuJXUOH02OhRVKASXst12d1b8Y2eUMmPt5M,10304
94
90
  qadence/exceptions/__init__.py,sha256=BU6vWrI9mshzr1aTPm1Ticr_o_42GjTrWI4OZXhThsI,203
95
91
  qadence/exceptions/exceptions.py,sha256=4j_VJpx2sZ2Mir5BJUWu4nwb131FY1ygO4q8-XlyfRc,190
96
92
  qadence/measurements/__init__.py,sha256=RIjG9tVJMqhNzyj7maZI250Um0KgHl2PizDcKJag-JU,161
97
93
  qadence/measurements/protocols.py,sha256=mD50R9yPs5bIYH7Efd0BsR0503apiyrsZydi_Q6BJag,1161
98
94
  qadence/measurements/samples.py,sha256=AVvszDwgfKnZ_ooATyTA3270vGeg1V3WO94jsfrTk-8,1200
99
- qadence/measurements/shadow.py,sha256=lYZWbBCJJh7pFXPV5jSvsyN_0g22ao3jARpKnx1jeJQ,12342
100
- qadence/measurements/tomography.py,sha256=8fzXhYOu_DaMiUoZzLvpP03WhuwlZ3ldkWepLUHjWqM,2665
101
- qadence/measurements/utils.py,sha256=CJmnSobzdeR4T4FuEpad7d-BSJ9W-wTaU9hRbveB6kY,6534
95
+ qadence/measurements/shadow.py,sha256=ahyGl-krBqyzm1teMlWes9o1vqSjp4pX-QIYQ_AzNPc,11499
96
+ qadence/measurements/tomography.py,sha256=Xz_sw-Vo1LOAHFgTiUsEmIn77j__4uuJNwWZz3KmTgE,2679
97
+ qadence/measurements/utils.py,sha256=rGFU2ZoTWdhYrUmVHiSSobzhQri8VTCPC-CW23-Dv5E,6548
102
98
  qadence/mitigations/__init__.py,sha256=RzaxYJftePFMloGhBVSixZ8fSe-ps_Jc-EyPm6xz-bs,159
103
- qadence/mitigations/analog_zne.py,sha256=M43TRSlPy8HjM1PQJHZUgVPXTodkVMe5KkOYFWVDa-4,7762
104
- qadence/mitigations/protocols.py,sha256=Jq9MyLujfTyWmc7XVUGYVRUkJT1MmZw-GgmWpVjmX2Y,1608
105
- qadence/mitigations/readout.py,sha256=HPfYmdjRlieUdOBMZTghFK4DRWfveM4KkDkEI0bMI0E,6262
106
- qadence/ml_tools/__init__.py,sha256=nTXcVpfSnMBWwHjU18ASIbvqfht5TIY9Zt9Wu1DATUg,1118
107
- qadence/ml_tools/config.py,sha256=b6pFoluE0YxrjDLG-a2ZL8Z0fZKSHoUqpySTB2lkzvg,25316
108
- qadence/ml_tools/constructors.py,sha256=OOUHF4FkX1VsBB1FqATQQuPQTemMQ5tVYPMTXafSwDI,28067
109
- qadence/ml_tools/data.py,sha256=ubwtkNvoBf0ZTGQm2M2Lgaim2tBAiAsa9VoTRR_MWks,5175
110
- qadence/ml_tools/models.py,sha256=SjwAPbSl9zn9YqfmwqHc2lIXCkIpwG_ysz4jieRh7W0,16996
111
- qadence/ml_tools/optimize_step.py,sha256=L92-kNILrmwz20d_Xd_FIQw6SDGJYIEbFN3tSRz9eno,1835
99
+ qadence/mitigations/analog_zne.py,sha256=5n1ffjGM1I5sd9TATsB90pKdDh32UTFJ-ZyOHKdM5z0,7821
100
+ qadence/mitigations/protocols.py,sha256=0TeHvlGTN8_88XNEwrjA97C5BUlrh34wYmx0w6-5Tyw,1622
101
+ qadence/mitigations/readout.py,sha256=nI-voV5N0R7630Cn8t8x9EdV9iB76P0LDkRosy1s0Ec,6631
102
+ qadence/ml_tools/__init__.py,sha256=a52dLBtUh5rTJ0ks_LREv-txtQ8pQZZhnQaIg28fSOw,936
103
+ qadence/ml_tools/config.py,sha256=KcwvfyUb1XT-8NkP1ULjaGRNZqJm6dmWnuY9Bl4KZl0,19406
104
+ qadence/ml_tools/constructors.py,sha256=gPfU-ICudfsByilYK-rFjax3HeTjtf_CqnR8axDy0F0,28081
105
+ qadence/ml_tools/data.py,sha256=5sAqG9rUtGZPzFlzEDhMjSeOXF8Z0BmszJ_FRzYAy2A,5311
106
+ qadence/ml_tools/models.py,sha256=DKSVFNC-Iq0-AmBrCZ1kqUpTBHQh_pX_1MqYT8eCG08,17045
107
+ qadence/ml_tools/optimize_step.py,sha256=wUnxfWy0c9rEKe41-26On1bPFBwmSYBF4WCGn76oyq8,3376
112
108
  qadence/ml_tools/parameters.py,sha256=gew2Kq_5-RgRpaTvs8eauVhgo0sTqqDQEV6WHFEiLGM,1301
113
- qadence/ml_tools/printing.py,sha256=2xMhsn2j0nQdO2klLcLWY33GT_7r-Gi83Fv2M2rGQQE,4789
114
- qadence/ml_tools/saveload.py,sha256=B6709ZdqHkg6kCZJmlZhCoWaNJ4ZynJe_W2IoaexLTs,5945
109
+ qadence/ml_tools/stages.py,sha256=qW2phMIvQBLM3tn2UoGN-ePiBnZoNq5k844eHVnnn8Y,1407
115
110
  qadence/ml_tools/tensors.py,sha256=xZ9ZRzOqEaMgLUGWQf1najDmL6iLuN1ojCGVFs1Tm94,1337
116
- qadence/ml_tools/train_grad.py,sha256=dJuNK8Gq1dLbK23TIeE6ynlYUoj0KQH9iPPDx7ZMNPU,14682
117
- qadence/ml_tools/train_no_grad.py,sha256=jUjnsxvWMrAa-7NV1bewpAo6mV9grF02gwBHy0SVTws,7249
111
+ qadence/ml_tools/trainer.py,sha256=ic1UWu2lYJFSsg-FG-bcbge3pqDGocsZ2hH4Ln8uuLQ,26222
118
112
  qadence/ml_tools/utils.py,sha256=PW8FyoV0mG_DtN1U8njTDV5qxZ0EK4mnFwMAsLBArfk,1410
119
- qadence/noise/__init__.py,sha256=r0nR8uEZeB1M9pI2UisjWq0bjw50fPFfVGzIMev923g,147
120
- qadence/noise/protocols.py,sha256=-aZ06JvMnpxCeT5v5lI_RNPOLbb9Ju1Pi1AB6uAXxVE,1653
121
- qadence/noise/readout.py,sha256=UpUdxaGu09SmqKXn0O7RYfF7b7UcRZiNMfDlpY0weV0,6726
113
+ qadence/ml_tools/callbacks/__init__.py,sha256=XaUKmyQZaqxI0jvKnWCpIBgnX5y4Kczcbn2FRiomFu4,655
114
+ qadence/ml_tools/callbacks/callback.py,sha256=F9tbXBBv3ZKTFbm0fGBZIZtTRO63jLazMk_oeL77dyE,16289
115
+ qadence/ml_tools/callbacks/callbackmanager.py,sha256=HwxgbqJi1GWYg2lgUqEyw9Y6a71YG_m5DmhpaeB6kLs,8007
116
+ qadence/ml_tools/callbacks/saveload.py,sha256=2z8v1A3qIIPZuusEcSNqgYTnKGKkDj71KvY_atJvKnM,6015
117
+ qadence/ml_tools/callbacks/writer_registry.py,sha256=Sl7OsBBzRCoOW5kQ1RMdAWS_y4TrIsGUI8XvA8JImJ4,14626
118
+ qadence/ml_tools/loss/__init__.py,sha256=d_0FlisdmgLY0qL1PeaabbcWX1B42RBdm7220cfzSN4,247
119
+ qadence/ml_tools/loss/loss.py,sha256=Bditg8nelMEpG4Yt0aopcAQz84xIc6O-AGUO2M0nqbM,2982
120
+ qadence/ml_tools/train_utils/__init__.py,sha256=1A2FlFg7kn68R1fdRC73S8DzA9gkBW7whdNHjzH5UTA,235
121
+ qadence/ml_tools/train_utils/base_trainer.py,sha256=7XrIV2qEV8qetYSH9Pg-RKqQUxGw8u7Xlz42yeVjh3Y,19864
122
+ qadence/ml_tools/train_utils/config_manager.py,sha256=dps94qfiwjhoY_aQp5RvQPd9zW_MIN2knw1UaDaYrKs,6896
123
+ qadence/noise/__init__.py,sha256=tnChHv7FzOaV8C7O0P2l_gfjrpmHg8JaNhZprL33CP4,161
124
+ qadence/noise/protocols.py,sha256=SPHJi5AiIOcz6U_iXY3ddVHk3cl9UHSDKk49eMTX2QM,8586
122
125
  qadence/operations/__init__.py,sha256=HAAo9VZUTq2H7kcEarChTgTWCIq7LT25-xBxkwE0F9c,1922
123
126
  qadence/operations/analog.py,sha256=v11DSrg-XUbwIAWAWM43y3VQbYKsx2ynx-HimUoC-x0,7435
124
- qadence/operations/control_ops.py,sha256=ZDOmTXxQJXSP2ASNWNUlt7pIuEjAVNT2FmexbK_TisM,9484
125
- qadence/operations/ham_evo.py,sha256=5k0x-4zXAgMxvlgFSFThnc_m-k1BEizw0wjhDnoU-ek,7814
126
- qadence/operations/parametric.py,sha256=BHGGn8k7hIZX8_0V1K1_FOnILAROEtqZGjBdIfzMcWI,4911
127
- qadence/operations/primitive.py,sha256=ekiylIW7mWjesBXVyVmowF75Ek82T_eNUVcDTEAGzFg,9002
128
- qadence/transpile/__init__.py,sha256=lb5LwsYb6lN5YFBsU3YBey7-0OcUQpYa3Q4hG6zmgi0,457
127
+ qadence/operations/control_ops.py,sha256=2ABP8fuf2mpJqRooDiBd2p-J-AL1yx3NDRF2TZf3K-c,10253
128
+ qadence/operations/ham_evo.py,sha256=brJ11tlwj6UPYkUcnId-BKlzNStsZd0vp9FKHCFTjlM,10642
129
+ qadence/operations/parametric.py,sha256=kV5d-diaQAoRlqKqoo0CGCbPej6eAxHQXniqfFKff3g,5394
130
+ qadence/operations/primitive.py,sha256=hDuwWndfPWqchM_98mOMf40qpkuPuwh39DIwHAbzGRo,9944
131
+ qadence/transpile/__init__.py,sha256=JrrQ4Osc4nNRWWjRGmVn57fWc8WwF92MokhKLRZ1vVA,499
129
132
  qadence/transpile/apply_fn.py,sha256=glZo2_wMOjw7_KgWKYbqg8j-9SDs-RefWIfxWgdQK8I,1336
130
133
  qadence/transpile/block.py,sha256=jV-EyatrwwdL2ahjF3wyEhC3PKMBPLaL5sQN1VNFc_w,11582
131
134
  qadence/transpile/circuit.py,sha256=KTh6Gv1czZddFuA1JhNNszheZbwViVixiGh4rGvIgTM,451
132
135
  qadence/transpile/digitalize.py,sha256=iWRwYAYQsD2INHj0HNbGJriv_3fRCuBW1nDBrwtKSuI,1523
133
136
  qadence/transpile/flatten.py,sha256=EdhSG5WyF56nbnxINNLqrHgY84MRM1YFjT3fR4aph5Q,3427
134
137
  qadence/transpile/invert.py,sha256=KAefHTG2AWr39aengVhXrzCtJPhrZC-ZnL6vYvmbnY0,4867
138
+ qadence/transpile/noise.py,sha256=LDcDJtQGkgUPkL2t69gg6AScTb-p3J3SxCDZbYOu1L8,1668
135
139
  qadence/transpile/transpile.py,sha256=6MRRkk1OS279L1fwUQjazA6qlfpbd-T_EJMKT8hAhOU,2721
136
- qadence-1.7.8.dist-info/METADATA,sha256=gEPDak8aSQfH-cItfLStkGpyqJnAfRHxxkeSns5_168,9986
137
- qadence-1.7.8.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
138
- qadence-1.7.8.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
139
- qadence-1.7.8.dist-info/RECORD,,
140
+ qadence-1.9.0.dist-info/METADATA,sha256=HbwOPe7bOi1evqjHaPIN8R7xiR_SRF2r4RqQyatKGPo,9842
141
+ qadence-1.9.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
142
+ qadence-1.9.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
143
+ qadence-1.9.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.25.0
2
+ Generator: hatchling 1.26.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,4 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from .backend import Backend, Configuration
4
- from .convert_ops import supported_gates
@@ -1,234 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from collections import Counter
4
- from dataclasses import dataclass, field
5
- from logging import getLogger
6
- from typing import Any
7
-
8
- import numpy as np
9
- import torch
10
- from braket.circuits import Circuit as BraketCircuit
11
- from braket.devices import LocalSimulator
12
- from torch import Tensor
13
-
14
- from qadence.backend import Backend as BackendInterface
15
- from qadence.backend import ConvertedCircuit, ConvertedObservable
16
- from qadence.backends.utils import to_list_of_dicts
17
- from qadence.blocks import AbstractBlock, block_to_tensor
18
- from qadence.circuit import QuantumCircuit
19
- from qadence.measurements import Measurements
20
- from qadence.mitigations import Mitigations
21
- from qadence.mitigations.protocols import apply_mitigation
22
- from qadence.noise import Noise
23
- from qadence.noise.protocols import apply_noise
24
- from qadence.overlap import overlap_exact
25
- from qadence.transpile import transpile
26
- from qadence.types import BackendName, Engine
27
- from qadence.utils import Endianness
28
-
29
- from .config import Configuration, default_passes
30
- from .convert_ops import convert_block
31
-
32
- logger = getLogger(__name__)
33
-
34
-
35
- def promote_parameters(parameters: dict[str, Tensor | float]) -> dict[str, float]:
36
- float_params = {}
37
- for name, value in parameters.items():
38
- try:
39
- v = value if isinstance(value, float) else value.item()
40
- float_params[name] = v
41
- except ValueError:
42
- raise ValueError("Currently batching is not supported with Braket digital")
43
- return float_params
44
-
45
-
46
- @dataclass(frozen=True, eq=True)
47
- class Backend(BackendInterface):
48
- name: BackendName = BackendName.BRAKET
49
- supports_ad: bool = False
50
- supports_adjoint: bool = False
51
- # TODO Use native braket adjoint differentiation.
52
- support_bp: bool = False
53
- is_remote: bool = False
54
- with_measurements: bool = True
55
- with_noise: bool = False
56
- native_endianness: Endianness = Endianness.BIG
57
- config: Configuration = field(default_factory=Configuration)
58
- engine: Engine = Engine.TORCH
59
- logger.debug("Initialised")
60
-
61
- # braket specifics
62
- # TODO: include it in the configuration?
63
- _device: LocalSimulator = field(default_factory=LocalSimulator)
64
-
65
- def __post_init__(self) -> None:
66
- if self.is_remote:
67
- raise NotImplementedError("Braket backend does not support cloud execution yet")
68
-
69
- def circuit(self, circuit: QuantumCircuit) -> ConvertedCircuit:
70
- passes = self.config.transpilation_passes
71
- if passes is None:
72
- passes = default_passes
73
-
74
- original_circ = circuit
75
- if len(passes) > 0:
76
- circuit = transpile(*passes)(circuit)
77
-
78
- native = BraketCircuit(convert_block(circuit.block))
79
- return ConvertedCircuit(native=native, abstract=circuit, original=original_circ)
80
-
81
- def observable(self, obs: AbstractBlock, n_qubits: int = None) -> Any:
82
- if n_qubits is None:
83
- n_qubits = obs.n_qubits
84
- native = block_to_tensor(
85
- block=obs,
86
- values={},
87
- qubit_support=tuple([i for i in range(n_qubits)]),
88
- endianness=Endianness.BIG,
89
- ).squeeze(0)
90
- return ConvertedObservable(native=native, abstract=obs, original=obs)
91
-
92
- def run(
93
- self,
94
- circuit: ConvertedCircuit,
95
- param_values: dict[str, Tensor] = {},
96
- state: Tensor | None = None,
97
- endianness: Endianness = Endianness.BIG,
98
- ) -> Tensor:
99
- """
100
- Execute the circuit and return a wavefunction in form of a statevector.
101
-
102
- Arguments:
103
- circuit: The circuit that is executed.
104
- param_values: Parameters of the circuit (after calling the embedding
105
- function on the user-facing parameters).
106
- state: Initial state.
107
- endianness: The endianness of the wave function.
108
- """
109
-
110
- if state is not None:
111
- raise NotImplementedError
112
-
113
- if self.is_remote:
114
- # handle here, or different backends?
115
- raise NotImplementedError
116
-
117
- # loop over all values in the batch
118
- results = []
119
- for vals in to_list_of_dicts(param_values):
120
- final_circuit = self.assign_parameters(circuit, vals)
121
-
122
- final_circuit.state_vector() # set simulation type
123
- task = self._device.run(final_circuit, 0)
124
- results.append(task.result().values[0])
125
- states = torch.tensor(np.array(results))
126
-
127
- n_qubits = circuit.abstract.n_qubits
128
- if endianness != self.native_endianness and n_qubits > 1:
129
- from qadence.transpile import invert_endianness
130
-
131
- states = invert_endianness(states)
132
- return states
133
-
134
- def sample(
135
- self,
136
- circuit: ConvertedCircuit,
137
- param_values: dict[str, Tensor] = {},
138
- n_shots: int = 1,
139
- state: Tensor | None = None,
140
- noise: Noise | None = None,
141
- mitigation: Mitigations | None = None,
142
- endianness: Endianness = Endianness.BIG,
143
- ) -> list[Counter]:
144
- """Execute the circuit and return samples of the resulting wavefunction."""
145
- if state is not None:
146
- raise NotImplementedError("Braket cannot handle a custom initial state.")
147
-
148
- if n_shots < 1:
149
- raise ValueError("You can only call sample with n_shots>0.")
150
-
151
- if self.is_remote:
152
- # handle here, or different backends?
153
- raise NotImplementedError
154
-
155
- # loop over all values in the batch
156
-
157
- samples = []
158
- for vals in to_list_of_dicts(param_values):
159
- final_circuit = self.assign_parameters(circuit, vals)
160
- task = self._device.run(final_circuit, n_shots)
161
- samples.append(task.result().measurement_counts)
162
- if endianness != self.native_endianness:
163
- from qadence.transpile import invert_endianness
164
-
165
- samples = invert_endianness(samples)
166
- if noise is not None:
167
- samples = apply_noise(noise=noise, samples=samples)
168
- if mitigation is not None:
169
- logger.warning(
170
- "Mitigation protocol is deprecated. Use qadence-protocols instead.",
171
- )
172
- assert noise
173
- samples = apply_mitigation(noise=noise, mitigation=mitigation, samples=samples)
174
- return samples
175
-
176
- def expectation(
177
- self,
178
- circuit: ConvertedCircuit,
179
- observable: list[ConvertedObservable] | ConvertedObservable,
180
- param_values: dict[str, Tensor] = {},
181
- state: Tensor | None = None,
182
- measurement: Measurements | None = None,
183
- noise: Noise | None = None,
184
- mitigation: Mitigations | None = None,
185
- endianness: Endianness = Endianness.BIG,
186
- ) -> Tensor:
187
- # Noise is ignored if measurement protocol is not provided.
188
- if noise is not None and measurement is None:
189
- logger.warning(
190
- f"Errors of type {noise} are not implemented for exact expectation yet. "
191
- "This is ignored for now."
192
- )
193
- # Do not flip endianness here because then we would have to reverse the observable
194
- wfs = self.run(circuit, param_values, state=state, endianness=Endianness.BIG)
195
-
196
- # TODO: Handle batching
197
- res = []
198
- observable = observable if isinstance(observable, list) else [observable]
199
- for wf in wfs:
200
- res.append([torch.vdot(wf, obs.native @ wf).real for obs in observable])
201
-
202
- return torch.tensor(res)
203
-
204
- def assign_parameters(
205
- self, circuit: ConvertedCircuit, param_values: dict[str, Tensor | float]
206
- ) -> BraketCircuit:
207
- """Assign numerical values to the circuit parameters."""
208
- if param_values is None:
209
- return circuit.native()
210
-
211
- params_copy = param_values.copy()
212
- pnames = [p.name for p in circuit.native.parameters]
213
-
214
- # account for fixed parameters
215
- for name in param_values.keys():
216
- if name not in pnames:
217
- params_copy.pop(name)
218
-
219
- # make sure that all the parameters are single floats
220
- # otherwise it won't be accepted by Braket
221
- native_params = promote_parameters(params_copy)
222
-
223
- # assign the parameters to the circuit
224
- assigned_circuit = circuit.native(**native_params)
225
-
226
- return assigned_circuit
227
-
228
- @staticmethod
229
- def _overlap(bras: Tensor, kets: Tensor) -> Tensor:
230
- return overlap_exact(bras, kets)
231
-
232
- @staticmethod
233
- def default_configuration() -> Configuration:
234
- return Configuration()
@@ -1,22 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass, field
4
- from logging import getLogger
5
- from typing import Callable
6
-
7
- from qadence.backend import BackendConfiguration
8
- from qadence.transpile import digitalize, fill_identities
9
-
10
- logger = getLogger(__name__)
11
-
12
- default_passes: list[Callable] = [fill_identities, digitalize]
13
-
14
-
15
- @dataclass
16
- class Configuration(BackendConfiguration):
17
- # FIXME: currently not used
18
- cloud_credentials: dict = field(default_factory=dict)
19
- """Credentials for connecting to the cloud.
20
-
21
- Execution on the QPUs available on Amazon Braket.
22
- """
@@ -1,116 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from itertools import chain as flatten
4
- from typing import Callable, Dict, List
5
-
6
- from braket.circuits.gates import (
7
- CZ,
8
- CNot,
9
- CPhaseShift,
10
- CSwap,
11
- H,
12
- I,
13
- Rx,
14
- Ry,
15
- Rz,
16
- S,
17
- Swap,
18
- T,
19
- X,
20
- Y,
21
- Z,
22
- )
23
- from braket.circuits.instruction import Instruction
24
- from braket.parametric import FreeParameter
25
-
26
- from qadence.blocks import AbstractBlock, CompositeBlock, PrimitiveBlock
27
- from qadence.exceptions import NotSupportedError
28
- from qadence.parameters import evaluate
29
- from qadence.types import OpName
30
-
31
- single_qubit: Dict[str, Callable] = {
32
- OpName.I: I.i,
33
- OpName.H: H.h,
34
- OpName.X: X.x,
35
- OpName.Y: Y.y,
36
- OpName.Z: Z.z,
37
- OpName.S: S.s,
38
- OpName.T: T.t,
39
- }
40
- single_qubit_parameterized: Dict[str, Callable] = {
41
- OpName.RX: Rx.rx,
42
- OpName.RY: Ry.ry,
43
- OpName.RZ: Rz.rz,
44
- }
45
- two_qubit: Dict[str, Callable] = {OpName.CNOT: CNot.cnot, OpName.SWAP: Swap.swap, OpName.CZ: CZ.cz}
46
- three_qubit: Dict[str, Callable] = {OpName.CSWAP: CSwap.cswap}
47
- two_qubit_parametrized: Dict[str, Callable] = {
48
- OpName.CPHASE: CPhaseShift.cphaseshift,
49
- }
50
-
51
- ops_map = {
52
- **single_qubit,
53
- **single_qubit_parameterized,
54
- **two_qubit,
55
- **two_qubit_parametrized,
56
- **three_qubit,
57
- }
58
-
59
- supported_gates = list(ops_map.keys())
60
-
61
-
62
- def BraketOperation(block: PrimitiveBlock) -> Instruction:
63
- operation = block.name
64
-
65
- if operation in single_qubit:
66
- return single_qubit[operation](target=block.qubit_support)
67
-
68
- elif operation in single_qubit_parameterized:
69
- ((uuid, expr),) = block.parameters.items() # type: ignore [attr-defined]
70
- if expr.is_number:
71
- return single_qubit_parameterized[operation](
72
- target=block.qubit_support, angle=evaluate(expr) # type: ignore
73
- )
74
- else:
75
- return single_qubit_parameterized[operation](
76
- target=block.qubit_support,
77
- angle=FreeParameter(uuid), # type: ignore
78
- )
79
-
80
- elif operation in two_qubit:
81
- return two_qubit[operation](block.qubit_support[0], block.qubit_support[1])
82
-
83
- elif operation in two_qubit_parametrized:
84
- ((uuid, expr),) = block.parameters.items() # type: ignore [attr-defined]
85
- if expr.is_number:
86
- return two_qubit_parametrized[operation](
87
- control=block.qubit_support[0],
88
- target=block.qubit_support[1],
89
- angle=evaluate(expr),
90
- )
91
- else:
92
- return two_qubit_parametrized[operation](
93
- control=block.qubit_support[0],
94
- target=block.qubit_support[1],
95
- angle=FreeParameter(uuid),
96
- )
97
- elif operation in three_qubit:
98
- return three_qubit[operation](
99
- block.qubit_support[0], block.qubit_support[1], block.qubit_support[2]
100
- )
101
- else:
102
- raise NotSupportedError(
103
- "Operation type {} is not supported for Braket backend.".format(type(block))
104
- )
105
-
106
-
107
- def convert_block(block: AbstractBlock) -> List[Instruction]:
108
- if isinstance(block, PrimitiveBlock):
109
- ops = [BraketOperation(block=block)]
110
- elif isinstance(block, CompositeBlock):
111
- ops = list(flatten(convert_block(b) for b in block.blocks))
112
- else:
113
- raise NotSupportedError(
114
- "Operation type {} is not supported for Braket backend.".format(type(block))
115
- )
116
- return ops