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.
- {tequila_basic-1.9.6/src/tequila_basic.egg-info → tequila_basic-1.9.7}/PKG-INFO +8 -5
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/README.md +6 -3
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/requirements.txt +1 -1
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/circuit.py +2 -5
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/qc_base.py +32 -19
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_base.py +13 -5
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/bitstrings.py +19 -10
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/version.py +1 -1
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/wavefunction/qubit_wavefunction.py +2 -8
- {tequila_basic-1.9.6 → tequila_basic-1.9.7/src/tequila_basic.egg-info}/PKG-INFO +8 -5
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/requires.txt +1 -1
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/LICENSE +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/MANIFEST.in +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/setup.cfg +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/setup.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/_unary_state_prep_impl.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/adapt/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/adapt/adapt.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/krylov/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/krylov/krylov.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/helpers.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/robustness/interval.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/apps/unary_state_prep.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/autograd_imports.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/_gates_impl.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/compiler.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/gates.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/gradient.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/noise.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/pyzx.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/qasm.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/circuit/qpic.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/binary_rep.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/binary_utils.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/compile_groups.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/ev_utils.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/fermionic_functions.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/fermionic_methods.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/grouping/overlapping_methods.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/paulis.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/paulistring.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/hamiltonian/qubit_hamiltonian.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/interface_torch.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/ml_api.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/ml/utils_ml.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/braket.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/objective.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/objective/qtensor.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/_containers.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_base.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_gd.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_gpyopt.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/optimizers/optimizer_scipy.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/chemistry_tools.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/encodings.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/madness_interface.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/orbital_optimizer.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/psi4_interface.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/pyscf_interface.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_api.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_cirq.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_pyquil.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qibo.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qiskit.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qlm.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qulacs.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_qulacs_gpu.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/simulators/simulator_symbolic.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/convenience.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/qng.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/tools/random_generators.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/exceptions.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/joined_transformation.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/keymap.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/utils/misc.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/wavefunction/__init__.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/SOURCES.txt +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/dependency_links.txt +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila_basic.egg-info/top_level.txt +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_TrotErr.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_adapt.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_array.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_binary_pauli.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_binary_utils.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_bitstrings.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_braket.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry_f12.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_chemistry_madness.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_circuits.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_fermionic_meas.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gd_optimizer.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gpyopt.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_gradient.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_hamiltonian_arithmetic.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_krylov.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_mappings.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_noise.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_noise_opt.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_objectives.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_pyzx.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_qasm.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_qtensor.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_recompilation_routines.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_scipy.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_simulator_backends.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_symbolic_simulator.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_torch_interface.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_unary_state_prep.py +0 -0
- {tequila_basic-1.9.6 → tequila_basic-1.9.7}/tests/test_variable.py +0 -0
- {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.
|
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
|
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
|
@@ -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
|
-
|
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,
|
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
|
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
|
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
|
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
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
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
|
-
|
2026
|
-
|
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 =
|
359
|
+
all_qubits = list(range(self.abstract_circuit.n_qubits))
|
360
360
|
active_qubits = self.qubit_map.keys()
|
361
361
|
|
362
|
-
#
|
363
|
-
|
362
|
+
# Keymap is only necessary if not all qubits are active
|
363
|
+
keymap_required = sorted(active_qubits) != all_qubits
|
364
364
|
|
365
|
-
|
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
|
-
|
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 =
|
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
|
183
|
-
|
184
|
-
|
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
|
-
|
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.
|
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
|
-
|
149
|
-
|
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.
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/madness_interface.py
RENAMED
File without changes
|
{tequila_basic-1.9.6 → tequila_basic-1.9.7}/src/tequila/quantumchemistry/orbital_optimizer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|