tequila-basic 1.9.6__tar.gz → 1.9.7__tar.gz

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 (124) hide show
  1. {tequila_basic-1.9.6/src/tequila_basic.egg-info → tequila_basic-1.9.7}/PKG-INFO +8 -5
  2. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/README.md +6 -3
  3. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/requirements.txt +1 -1
  4. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/circuit.py +2 -5
  5. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/qc_base.py +32 -19
  6. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_base.py +13 -5
  7. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/bitstrings.py +19 -10
  8. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/version.py +1 -1
  9. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/wavefunction/qubit_wavefunction.py +2 -8
  10. {tequila_basic-1.9.6 → tequila_basic-1.9.7/src/tequila_basic.egg-info}/PKG-INFO +8 -5
  11. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/requires.txt +1 -1
  12. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/LICENSE +0 -0
  13. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/MANIFEST.in +0 -0
  14. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/setup.cfg +0 -0
  15. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/setup.py +0 -0
  16. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/__init__.py +0 -0
  17. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/__init__.py +0 -0
  18. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/_unary_state_prep_impl.py +0 -0
  19. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/adapt/__init__.py +0 -0
  20. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/adapt/adapt.py +0 -0
  21. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/krylov/__init__.py +0 -0
  22. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/krylov/krylov.py +0 -0
  23. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/__init__.py +0 -0
  24. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/helpers.py +0 -0
  25. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/interval.py +0 -0
  26. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/unary_state_prep.py +0 -0
  27. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/autograd_imports.py +0 -0
  28. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/__init__.py +0 -0
  29. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/_gates_impl.py +0 -0
  30. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/compiler.py +0 -0
  31. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/gates.py +0 -0
  32. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/gradient.py +0 -0
  33. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/noise.py +0 -0
  34. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/pyzx.py +0 -0
  35. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/qasm.py +0 -0
  36. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/qpic.py +0 -0
  37. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/__init__.py +0 -0
  38. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/binary_rep.py +0 -0
  39. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/binary_utils.py +0 -0
  40. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/compile_groups.py +0 -0
  41. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/ev_utils.py +0 -0
  42. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/fermionic_functions.py +0 -0
  43. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/fermionic_methods.py +0 -0
  44. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/overlapping_methods.py +0 -0
  45. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/__init__.py +0 -0
  46. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/paulis.py +0 -0
  47. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/paulistring.py +0 -0
  48. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/qubit_hamiltonian.py +0 -0
  49. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/__init__.py +0 -0
  50. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/interface_torch.py +0 -0
  51. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/ml_api.py +0 -0
  52. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/utils_ml.py +0 -0
  53. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/__init__.py +0 -0
  54. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/braket.py +0 -0
  55. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/objective.py +0 -0
  56. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/qtensor.py +0 -0
  57. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/__init__.py +0 -0
  58. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/_containers.py +0 -0
  59. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_base.py +0 -0
  60. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_gd.py +0 -0
  61. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_gpyopt.py +0 -0
  62. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_scipy.py +0 -0
  63. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/__init__.py +0 -0
  64. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/chemistry_tools.py +0 -0
  65. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/encodings.py +0 -0
  66. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/madness_interface.py +0 -0
  67. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/orbital_optimizer.py +0 -0
  68. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/psi4_interface.py +0 -0
  69. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/pyscf_interface.py +0 -0
  70. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/__init__.py +0 -0
  71. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_api.py +0 -0
  72. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_cirq.py +0 -0
  73. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_pyquil.py +0 -0
  74. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qibo.py +0 -0
  75. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qiskit.py +0 -0
  76. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qlm.py +0 -0
  77. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qulacs.py +0 -0
  78. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qulacs_gpu.py +0 -0
  79. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_symbolic.py +0 -0
  80. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/__init__.py +0 -0
  81. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/convenience.py +0 -0
  82. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/qng.py +0 -0
  83. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/random_generators.py +0 -0
  84. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/__init__.py +0 -0
  85. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/exceptions.py +0 -0
  86. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/joined_transformation.py +0 -0
  87. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/keymap.py +0 -0
  88. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/misc.py +0 -0
  89. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/wavefunction/__init__.py +0 -0
  90. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/SOURCES.txt +0 -0
  91. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/dependency_links.txt +0 -0
  92. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/top_level.txt +0 -0
  93. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_TrotErr.py +0 -0
  94. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_adapt.py +0 -0
  95. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_array.py +0 -0
  96. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_binary_pauli.py +0 -0
  97. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_binary_utils.py +0 -0
  98. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_bitstrings.py +0 -0
  99. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_braket.py +0 -0
  100. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry.py +0 -0
  101. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry_f12.py +0 -0
  102. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry_madness.py +0 -0
  103. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_circuits.py +0 -0
  104. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_fermionic_meas.py +0 -0
  105. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gd_optimizer.py +0 -0
  106. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gpyopt.py +0 -0
  107. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gradient.py +0 -0
  108. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_hamiltonian_arithmetic.py +0 -0
  109. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_krylov.py +0 -0
  110. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_mappings.py +0 -0
  111. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_noise.py +0 -0
  112. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_noise_opt.py +0 -0
  113. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_objectives.py +0 -0
  114. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_pyzx.py +0 -0
  115. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_qasm.py +0 -0
  116. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_qtensor.py +0 -0
  117. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_recompilation_routines.py +0 -0
  118. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_scipy.py +0 -0
  119. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_simulator_backends.py +0 -0
  120. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_symbolic_simulator.py +0 -0
  121. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_torch_interface.py +0 -0
  122. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_unary_state_prep.py +0 -0
  123. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_variable.py +0 -0
  124. {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_zzz_cleanup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tequila-basic
3
- Version: 1.9.6
3
+ Version: 1.9.7
4
4
  Summary: A High-Level Abstraction Framework for Quantum Algorithms
5
5
  Home-page: https://github.com/tequilahub/tequila
6
6
  Author: Tequila Developers
@@ -8,7 +8,7 @@ Author-email: jakob.kottmann@gmail.com
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
10
  Requires-Dist: numpy
11
- Requires-Dist: scipy<1.11
11
+ Requires-Dist: scipy
12
12
  Requires-Dist: sympy
13
13
  Requires-Dist: autograd
14
14
  Requires-Dist: setuptools
@@ -24,11 +24,14 @@ Tequila is an abstraction framework for (variational) quantum algorithms.
24
24
  It operates on abstract data structures allowing the formulation, combination, automatic differentiation and optimization of generalized objectives.
25
25
  Tequila can execute the underlying quantum expectation values on state of the art simulators as well as on real quantum devices.
26
26
 
27
+ # Getting Started
28
+
29
+ Get started with our collection of
30
+ - *[Tutorials](https://thuytr18.github.io/tequila-tutorials-beta/tutorials.html)*
31
+
32
+ Further sources:
27
33
  - [overview article](https://arxiv.org/abs/2011.03057)
28
34
  - [tequila in a nutshell](https://kottmanj.github.io/tequila-in-a-nutshell/#/)
29
- - [getting started](https://jakobkottmann.com/posts/tq-get-started/)
30
- - [circuits in tequila](https://jakobkottmann.com/posts/tq-circuits/)
31
- - [notebook collection](https://github.com/tequilahub/tequila-tutorials)
32
35
  - [talks and slides](https://kottmanj.github.io/talks_and_material/)
33
36
 
34
37
  # Installation
@@ -6,11 +6,14 @@ Tequila is an abstraction framework for (variational) quantum algorithms.
6
6
  It operates on abstract data structures allowing the formulation, combination, automatic differentiation and optimization of generalized objectives.
7
7
  Tequila can execute the underlying quantum expectation values on state of the art simulators as well as on real quantum devices.
8
8
 
9
+ # Getting Started
10
+
11
+ Get started with our collection of
12
+ - *[Tutorials](https://thuytr18.github.io/tequila-tutorials-beta/tutorials.html)*
13
+
14
+ Further sources:
9
15
  - [overview article](https://arxiv.org/abs/2011.03057)
10
16
  - [tequila in a nutshell](https://kottmanj.github.io/tequila-in-a-nutshell/#/)
11
- - [getting started](https://jakobkottmann.com/posts/tq-get-started/)
12
- - [circuits in tequila](https://jakobkottmann.com/posts/tq-circuits/)
13
- - [notebook collection](https://github.com/tequilahub/tequila-tutorials)
14
17
  - [talks and slides](https://kottmanj.github.io/talks_and_material/)
15
18
 
16
19
  # Installation
@@ -1,6 +1,6 @@
1
1
  # necessary
2
2
  numpy
3
- scipy < 1.11 # for now, until issues with scipy/pyscf are fixed # can in principle be smaller, we recommend >= 1.5 for consistency with our tutorials (numerical gradients mostly)
3
+ scipy
4
4
  sympy
5
5
  #jax
6
6
  #jaxlib
@@ -46,10 +46,7 @@ class QCircuit():
46
46
  Convenience: see src/tequila/circuit/qpic.py - export_to for more
47
47
  Parameters
48
48
  """
49
- # this way we allow calling U.export_to("asd.png") instead of having to specify U.export_to(filename="asd.png")
50
- if "circuit" not in kwargs:
51
- kwargs["circuit"]=self
52
- return export_to(*args, **kwargs)
49
+ return export_to(self, *args, **kwargs)
53
50
 
54
51
  @property
55
52
  def moments(self):
@@ -389,7 +386,7 @@ class QCircuit():
389
386
  for k, v in other._parameter_map.items():
390
387
  self._parameter_map[k] += [(x[0] + offset, x[1]) for x in v]
391
388
 
392
- self._gates += other.gates
389
+ self._gates += copy.deepcopy(other.gates)
393
390
  self._min_n_qubits = max(self._min_n_qubits, other._min_n_qubits)
394
391
 
395
392
  return self
@@ -1737,7 +1737,7 @@ class QuantumChemistryBase:
1737
1737
 
1738
1738
  def compute_rdms(self, U: QCircuit = None, variables: Variables = None, spin_free: bool = True,
1739
1739
  get_rdm1: bool = True, get_rdm2: bool = True, ordering="dirac", use_hcb: bool = False,
1740
- rdm_trafo: QubitHamiltonian = None, decompose=None):
1740
+ rdm_trafo: QubitHamiltonian = None, evaluate=True):
1741
1741
  """
1742
1742
  Computes the one- and two-particle reduced density matrices (rdm1 and rdm2) given
1743
1743
  a unitary U. This method uses the standard ordering in physics as denoted below.
@@ -1768,7 +1768,10 @@ class QuantumChemistryBase:
1768
1768
  rdm_trafo :
1769
1769
  The rdm operators can be transformed, e.g., a^dagger_i a_j -> U^dagger a^dagger_i a_j U,
1770
1770
  where U represents the transformation. The default is set to None, implying that U equas the identity.
1771
-
1771
+ evaluate :
1772
+ if true, the tequila expectation values are evaluated directly via the tq.simulate command.
1773
+ the protocol is optimized to avoid repetation of wavefunction simulation
1774
+ if false, the rdms are returned as tq.QTensors
1772
1775
  Returns
1773
1776
  -------
1774
1777
  """
@@ -1891,13 +1894,14 @@ class QuantumChemistryBase:
1891
1894
  ops += [op]
1892
1895
  return ops
1893
1896
 
1894
- def _assemble_rdm1(evals) -> numpy.ndarray:
1897
+ def _assemble_rdm1(evals, rdm1=None) -> numpy.ndarray:
1895
1898
  """
1896
1899
  Returns spin-ful or spin-free one-particle RDM built by symmetry conditions
1897
1900
  Same symmetry with or without spin, so we can use the same function
1898
1901
  """
1899
1902
  N = n_MOs if spin_free else n_SOs
1900
- rdm1 = numpy.zeros([N, N])
1903
+ if rdm1 is None:
1904
+ rdm1 = numpy.zeros([N, N])
1901
1905
  ctr: int = 0
1902
1906
  for p in range(N):
1903
1907
  for q in range(p + 1):
@@ -1908,10 +1912,11 @@ class QuantumChemistryBase:
1908
1912
 
1909
1913
  return rdm1
1910
1914
 
1911
- def _assemble_rdm2_spinful(evals) -> numpy.ndarray:
1915
+ def _assemble_rdm2_spinful(evals, rdm2=None) -> numpy.ndarray:
1912
1916
  """ Returns spin-ful two-particle RDM built by symmetry conditions """
1913
1917
  ctr: int = 0
1914
- rdm2 = numpy.zeros([n_SOs, n_SOs, n_SOs, n_SOs])
1918
+ if rdm2 is None:
1919
+ rdm2 = numpy.zeros([n_SOs, n_SOs, n_SOs, n_SOs])
1915
1920
  for p in range(n_SOs):
1916
1921
  for q in range(p):
1917
1922
  for r in range(n_SOs):
@@ -1933,10 +1938,11 @@ class QuantumChemistryBase:
1933
1938
 
1934
1939
  return rdm2
1935
1940
 
1936
- def _assemble_rdm2_spinfree(evals) -> numpy.ndarray:
1941
+ def _assemble_rdm2_spinfree(evals, rdm2=None) -> numpy.ndarray:
1937
1942
  """ Returns spin-free two-particle RDM built by symmetry conditions """
1938
1943
  ctr: int = 0
1939
- rdm2 = numpy.zeros([n_MOs, n_MOs, n_MOs, n_MOs])
1944
+ if rdm2 is None:
1945
+ rdm2 = numpy.zeros([n_MOs, n_MOs, n_MOs, n_MOs])
1940
1946
  for p, q, r, s in product(range(n_MOs), repeat=4):
1941
1947
  if p * n_MOs + q >= r * n_MOs + s and (p >= q or r >= s):
1942
1948
  rdm2[p, q, r, s] = evals[ctr]
@@ -2012,18 +2018,25 @@ class QuantumChemistryBase:
2012
2018
  # Transform operator lists to QubitHamiltonians
2013
2019
  if (not use_hcb):
2014
2020
  qops = [_get_qop_hermitian(op) for op in qops]
2015
-
2021
+
2016
2022
  # Compute expected values
2017
- if rdm_trafo is None:
2018
- if decompose is not None:
2019
- print("MANIPULATED")
2020
- X = decompose(H=qops, U=U)
2021
- evals = simulate(X, variables=variables)
2023
+ rdm1 = None
2024
+ rdm2 = None
2025
+ from tequila import QTensor
2026
+ if evaluate:
2027
+ if rdm_trafo is None:
2028
+ evals = simulate(ExpectationValue(H=qops, U=U, shape=[len(qops)]), variables=variables)
2022
2029
  else:
2030
+ qops = [rdm_trafo.dagger()*qops[i]*rdm_trafo for i in range(len(qops))]
2023
2031
  evals = simulate(ExpectationValue(H=qops, U=U, shape=[len(qops)]), variables=variables)
2024
2032
  else:
2025
- qops = [rdm_trafo.dagger()*qops[i]*rdm_trafo for i in range(len(qops))]
2026
- evals = simulate(ExpectationValue(H=qops, U=U, shape=[len(qops)]), variables=variables)
2033
+ if rdm_trafo is None:
2034
+ evals = [ExpectationValue(H=x, U=U) for x in qops]
2035
+ N = n_MOs if spin_free else n_SOs
2036
+ rdm1 = QTensor(shape=[N,N])
2037
+ rdm2 = QTensor(shape=[N, N, N, N])
2038
+ else:
2039
+ raise TequilaException("compute_rdms: rdm_trafo was set but evaluate flag is False (not supported)")
2027
2040
 
2028
2041
  # Assemble density matrices
2029
2042
  # If self._rdm1, self._rdm2 exist, reset them if they are of the other spin-type
@@ -2044,11 +2057,11 @@ class QuantumChemistryBase:
2044
2057
  len_1 = 0
2045
2058
  evals_1, evals_2 = evals[:len_1], evals[len_1:]
2046
2059
  # Build matrices using the expectation values
2047
- self._rdm1 = _assemble_rdm1(evals_1) if get_rdm1 else self._rdm1
2060
+ self._rdm1 = _assemble_rdm1(evals_1, rdm1=rdm1) if get_rdm1 else self._rdm1
2048
2061
  if spin_free or use_hcb:
2049
- self._rdm2 = _assemble_rdm2_spinfree(evals_2) if get_rdm2 else self._rdm2
2062
+ self._rdm2 = _assemble_rdm2_spinfree(evals_2, rdm2=rdm2) if get_rdm2 else self._rdm2
2050
2063
  else:
2051
- self._rdm2 = _assemble_rdm2_spinful(evals_2) if get_rdm2 else self._rdm2
2064
+ self._rdm2 = _assemble_rdm2_spinful(evals_2, rdm2=rdm2) if get_rdm2 else self._rdm2
2052
2065
 
2053
2066
  if get_rdm2:
2054
2067
  rdm2 = NBodyTensor(elems=self.rdm2, ordering="dirac", verify=False)
@@ -356,15 +356,23 @@ class BackendCircuit():
356
356
  raise TequilaException("only product states as initial states accepted")
357
357
  initial_state = list(initial_state.keys())[0].integer
358
358
 
359
- all_qubits = [i for i in range(self.abstract_circuit.n_qubits)]
359
+ all_qubits = list(range(self.abstract_circuit.n_qubits))
360
360
  active_qubits = self.qubit_map.keys()
361
361
 
362
- # maps from reduced register to full register
363
- keymap = KeyMapSubregisterToRegister(subregister=active_qubits, register=all_qubits)
362
+ # Keymap is only necessary if not all qubits are active
363
+ keymap_required = sorted(active_qubits) != all_qubits
364
364
 
365
- result = self.do_simulate(variables=variables, initial_state=keymap.inverted(initial_state).integer, *args,
365
+ if keymap_required:
366
+ # maps from reduced register to full register
367
+ keymap = KeyMapSubregisterToRegister(subregister=active_qubits, register=all_qubits)
368
+
369
+ mapped_initial_state = keymap.inverted(initial_state).integer if keymap_required else int(initial_state)
370
+ result = self.do_simulate(variables=variables, initial_state=mapped_initial_state, *args,
366
371
  **kwargs)
367
- result.apply_keymap(keymap=keymap, initial_state=initial_state)
372
+
373
+ if keymap_required:
374
+ result.apply_keymap(keymap=keymap, initial_state=initial_state)
375
+
368
376
  return result
369
377
 
370
378
  def sample(self, variables, samples, read_out_qubits=None, circuit=None, *args, **kwargs):
@@ -1,6 +1,7 @@
1
1
  from enum import Enum
2
2
  from typing import List
3
3
  from functools import total_ordering
4
+ from math import ceil, log2
4
5
 
5
6
 
6
7
  class BitNumbering(Enum):
@@ -35,7 +36,7 @@ class BitString:
35
36
 
36
37
  def update_nbits(self):
37
38
  current = self.nbits
38
- min_needed = len(format(self._value, 'b'))
39
+ min_needed = ceil(log2(self._value + 1))
39
40
  self._nbits = max(current, min_needed)
40
41
  return self
41
42
 
@@ -177,15 +178,23 @@ class BitStringLSB(BitString):
177
178
  return BitNumbering.LSB
178
179
 
179
180
 
181
+ def _reverse_int_bits(x: int, nbits: int) -> int:
182
+ if nbits is None:
183
+ nbits = x.bit_length()
184
+ assert nbits <= 32
185
+
186
+ x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1)
187
+ x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2)
188
+ x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4)
189
+ x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8)
190
+ x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16)
191
+ return x >> (32 - nbits)
192
+
193
+
180
194
  def initialize_bitstring(integer: int, nbits: int = None, numbering_in: BitNumbering = BitNumbering.MSB,
181
195
  numbering_out: BitNumbering = BitNumbering.MSB):
182
- if numbering_in == BitNumbering.MSB:
183
- if numbering_out == BitNumbering.MSB:
184
- return BitString.from_int(integer=integer, nbits=nbits)
185
- else:
186
- return BitString.from_binary(binary=BitStringLSB.from_int(integer=integer, nbits=nbits).binary, nbits=nbits)
196
+ integer = _reverse_int_bits(integer, nbits) if numbering_in != numbering_out else integer
197
+ if numbering_out == BitNumbering.MSB:
198
+ return BitString.from_int(integer=integer, nbits=nbits)
187
199
  else:
188
- if numbering_out == BitNumbering.LSB:
189
- return BitStringLSB.from_int(integer=integer, nbits=nbits)
190
- else:
191
- return BitStringLSB.from_binary(binary=BitString.from_int(integer=integer, nbits=nbits).binary, nbits=nbits)
200
+ return BitStringLSB.from_int(integer=integer, nbits=nbits)
@@ -1,2 +1,2 @@
1
- __version__ = "1.9.6"
1
+ __version__ = "1.9.7"
2
2
  __author__ = "Tequila Developers "
@@ -145,18 +145,12 @@ class QubitWaveFunction:
145
145
  maxkey = len(arr) - 1
146
146
  maxbit = initialize_bitstring(integer=maxkey, numbering_in=numbering, numbering_out=cls.numbering).nbits
147
147
  for ii, v in enumerate(arr):
148
- i = initialize_bitstring(integer=ii, nbits=maxbit, numbering_in=numbering, numbering_out=cls.numbering)
149
- if not numpy.isclose(abs(v), 0.0, atol=threshold):
148
+ if abs(v) > threshold:
149
+ i = initialize_bitstring(integer=ii, nbits=maxbit, numbering_in=numbering, numbering_out=cls.numbering)
150
150
  key = i if keymap is None else keymap(i)
151
151
  state[key] = v
152
152
  result = QubitWaveFunction(state, n_qubits=n_qubits)
153
153
 
154
- if cls.numbering != numbering:
155
- if cls.numbering == BitNumbering.MSB:
156
- result.apply_keymap(keymap=KeyMapLSB2MSB())
157
- else:
158
- result.apply_keymap(keymap=KeyMapMSB2LSB())
159
-
160
154
  return result
161
155
 
162
156
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tequila-basic
3
- Version: 1.9.6
3
+ Version: 1.9.7
4
4
  Summary: A High-Level Abstraction Framework for Quantum Algorithms
5
5
  Home-page: https://github.com/tequilahub/tequila
6
6
  Author: Tequila Developers
@@ -8,7 +8,7 @@ Author-email: jakob.kottmann@gmail.com
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
10
  Requires-Dist: numpy
11
- Requires-Dist: scipy<1.11
11
+ Requires-Dist: scipy
12
12
  Requires-Dist: sympy
13
13
  Requires-Dist: autograd
14
14
  Requires-Dist: setuptools
@@ -24,11 +24,14 @@ Tequila is an abstraction framework for (variational) quantum algorithms.
24
24
  It operates on abstract data structures allowing the formulation, combination, automatic differentiation and optimization of generalized objectives.
25
25
  Tequila can execute the underlying quantum expectation values on state of the art simulators as well as on real quantum devices.
26
26
 
27
+ # Getting Started
28
+
29
+ Get started with our collection of
30
+ - *[Tutorials](https://thuytr18.github.io/tequila-tutorials-beta/tutorials.html)*
31
+
32
+ Further sources:
27
33
  - [overview article](https://arxiv.org/abs/2011.03057)
28
34
  - [tequila in a nutshell](https://kottmanj.github.io/tequila-in-a-nutshell/#/)
29
- - [getting started](https://jakobkottmann.com/posts/tq-get-started/)
30
- - [circuits in tequila](https://jakobkottmann.com/posts/tq-circuits/)
31
- - [notebook collection](https://github.com/tequilahub/tequila-tutorials)
32
35
  - [talks and slides](https://kottmanj.github.io/talks_and_material/)
33
36
 
34
37
  # Installation
@@ -1,5 +1,5 @@
1
1
  numpy
2
- scipy<1.11
2
+ scipy
3
3
  sympy
4
4
  autograd
5
5
  setuptools
File without changes
File without changes
File without changes
File without changes