************* Release Notes ************* ========================= cuQuantum Python v22.11.0 ========================= * We are on `NVIDIA/cuQuantum GitHub Discussions `_! For any questions regarding (or exciting works built upon) cuQuantum, please feel free to reach out to us on GitHub Discussions. * Bug reports should still go to `our GitHub issue tracker `_. * Add new APIs and functionalities: * For cuTensorNet low-level APIs, please refer to the release notes of :ref:`cuTensorNet v2.0.0 `; no new cuStateVec API is added. * A new API, :meth:`cuquantum.CircuitToEinsum.batched_amplitudes` to compute the amplitudes for a batch of qubits. This is equivalent to the kwargs ``fixed`` support in :meth:`cuquantum.CircuitToEinsum.state_vector`, which is deprecated and will be removed in a future release. * A new API, :meth:`cuquantum.CircuitToEinsum.expectation` to support expectation value computation for Pauli strings. * A new helper API, :func:`cuquantum.cutensornet.get_mpi_comm_pointer` to get the pointer to and size of MPI communicator for the new low-level API :func:`cuquantum.cutensornet.distributed_reset_configuration` that enables disbtributed parallelism. This capability requires ``mpi4py``. * The :mod:`cuquantum` module now has a command line interface to return the include and library paths and the linker flags for the cuTENSOR and cuQuantum libraries: ``python -m cuquantum``. See :ref:`python cmdline support` for detail. * Support for controlling non-blocking behavior via the new option :attr:`cuquantum.NetworkOptions.blocking`. * API changes: * For cuTensorNet low-level APIs, please refer to the release notes of :ref:`cuTensorNet v2.0.0 `; cuStateVec low-level APIs remain unchanged. * Users can set the tensor qualifiers by using the dedicated NumPy dtype :data:`cuquantum.cutensornet.tensor_qualifiers_dtype`. See the Python sample (`python/samples/cutensornet/coarse/example21.py `_) for details. For example, complex conjugation can be done on-the-fly, reducing memory pressure. * To get/set the contraction path or slicing configurations, users should use :func:`~cuquantum.cutensornet.contraction_optimizer_info_get_attribute_dtype` to get a NumPy custom dtype representing the path or slicing configuration object, in a manner consistent with the method used for all other attributes. Refer to the docstring for details. The (experimental) ``ContractionPath`` object is removed. * Functionality/performance improvements: * Improved performance when contracting two tensors using :func:`cuquantum.contract` or related APIs. * Improved performance for reusing a :class:`~cuquantum.Network` object with :meth:`~cuquantum.Network.reset_operands`. * The lightcone construction in :class:`~cuquantum.CircuitToEinsum` is improved to further reduce the number of tensors in the network. * The build system now supports PEP-517 and standard ``pip`` command-line flags. The environment variable ``CUQUANTUM_IGNORE_SOLVER`` is no longer used. See :doc:`Getting Started ` for more information. * Bugs fixed: * Fix a potential multi-device bug in the internal device context switch. * Fix a bug for using invalid mode labels in :class:`cuquantum.CircuitToEinsum` when input circuit size gets large. * Other changes: * Provide one more distributed (MPI+NCCL) Python sample (``example4_mpi_nccl.py``) to show how to use cuTensorNet and create parallelism. * The test infrastructure will show tests that are not runnable as "deselected" instead of "skipped". * A new pip wheel is released on PyPI: ``pip install cuquantum-python-cu11``. Users can still install cuQuantum Python via ``pip install cuquantum-python``, as before. ``cuquantum-python`` now becomes a meta-wheel pointing to ``cuquantum-python-cu11``. This may change in a future release when a new CUDA version becomes available. Using wheels with the ``-cuXX`` suffix is encouraged. *Compatibility notes*: * cuQuantum Python now requires cuStateVec 1.1.0 or above. * cuQuantum Python now requires cuTensorNet 2.0.0 or above. * cuQuantum Python now requires cuTENSOR 1.6.1 or above. ========================= cuQuantum Python v22.07.1 ========================= * Bugs fixed: * The 22.07.0 ``cuquantum`` wheel had a wrong file layout. (If you are using the ``cuqauntum`` 22.07.0.1 or 22.07.0.2 hot-fix wheel, they will work fine.) ========================= cuQuantum Python v22.07.0 ========================= * Add new APIs and functionalities: * For low-level APIs, please refer to the release notes of :ref:`cuStateVec v1.1.0 ` and :ref:`cuTensorNet v1.1.0 `. * New high-level API :class:`cuquantum.CircuitToEinsum` that supports conversion of :class:`qiskit.QuantumCircuit` and :class:`cirq.Circuit` to tensor network contraction: - Support state coefficient - Support bitstring amplitude - Support reduced density matrix - Backend support on NumPy, CuPy and PyTorch * Add a keyword-only argument ``slices`` to the :meth:`cuquantum.Network.contract` method to support contracting an arbitrary subset of the slices. * Add a new attribute ``intermediate_modes`` to the :class:`cuquantum.OptimizerInfo` object for retrieving the mode labels of all intermediate tensors. * Add a new attribute ``num_slices`` to the :class:`cuquantum.OptimizerInfo` object for querying the total number of slices. * Functionality/performance improvements: * Improve the einsum expression parser. * Bugs fixed: * An exception mistakenly raised in :func:`cuquantum.einsum` when ``optimize`` is set to `False`. * Missing f-specifier in the string representation of :class:`cuquantum.OptimizerInfo`. * Other changes: * Drop the dependency on ``typing_extensions``. * Provide distributed (MPI-based) Python samples that show how easy it is to use cuTensorNet and create parallelism. ``mpi4py`` is required for running these samples. * Update the low-level, non-distributed sample ``tensornet_example.py`` by improving memory usage and switching to the new contraction API :func:`~cuquantum.cutensornet.contract_slices`. * Provide Jupyter notebooks to show how to convert a quantum circuit to a tensor network contraction. * Add a Python sample to illustrate the usage of the new multi-device bit-swapping :func:`~cuquantum.custatevec.multi_device_swap_index_bits` API. * Restructure the ``samples`` folder to separate cuStateVec and cuTensorNet samples. *Compatibility notes*: * cuQuantum Python now requires cuQuantum v22.07. * cuQuantum Python now requires Python 3.8+. * cuQuantum Python now requires NumPy v1.19+. * cuQuantum Python supports Cirq v0.6.0+. * cuQuantum Python supports Qiskit v0.24.0+. ========================= cuQuantum Python v22.05.0 ========================= * Bugs fixed: * Make ``typing_extensions`` a required dependency (`NVIDIA/cuQuantum#3 `_) * Fix issues in the test suite * Other changes: * The Python sample (`python/samples/tensornet_example.py `_) is updated to include a correctness check ========================= cuQuantum Python v22.03.0 ========================= * Stable release: * Starting this release, cuQuantum Python switches to the CalVer versioning scheme, following cuQuantum SDK * ``pip`` wheels are released on PyPI: ``pip install cuquantum-python`` * Functionality/performance improvements: * High-level tensor network APIs are now fully NumPy compliant: - Support generalized einsum expressions - Support ellipsis - Support broadcasting * Add new APIs and functionalities for: * For low-level APIs, please refer to the release notes of :ref:`cuStateVec v1.0.0 ` and :ref:`cuTensorNet v1.0.0 `. * The high-level APIs support an EMM-like memory plugin interface (see :ref:`high-level memory management`). * API changes: * For low-level APIs, please refer to the release notes of :ref:`cuStateVec v1.0.0 ` and :ref:`cuTensorNet v1.0.0 `. * No API breaking changes for the high-level APIs. *Compatibility notes*: * cuQuantum Python requires cuQuantum v22.03 * cuQuantum Python requires Python 3.7+ - In the next release, Python 3.7 will be dropped to follow `NEP-29`_. * cuQuantum Python requires NumPy v1.17+ - In the next release, NumPy 1.17 & 1.18 will be dropped to follow `NEP-29`_. * cuQuantum Python requires CuPy v9.5+ * cuQuantum Python supports PyTorch v1.10+ .. _NEP-29: https://numpy.org/neps/nep-0029-deprecation_policy.html *Known issues*: * If you install cuQuantum Python from PyPI (``pip install cuquantum-python``), make sure you also install ``typing_extensions`` (via ``pip`` or ``conda``). This only affects the wheel installation and will be fixed in the next release. (`NVIDIA/cuQuantum#3 `_) ========================= cuQuantum Python v0.1.0.1 ========================= * Patch release: - Add a ``__version__`` string ========================= cuQuantum Python v0.1.0.0 ========================= * Initial release (beta 2) *Compatibility notes*: * cuQuantum Python requires cuQuantum v0.1.0 * cuQuantum Python requires NumPy v1.17+ * cuQuantum Python requires CuPy v9.5+ * cuQuantum Python supports PyTorch v1.10+ *Limitation notes*: * In certain environments, if PyTorch is installed ``import cuquantum`` could fail (with a segmentation fault). It is currently under investigation and a temporary workaround is to import ``torch`` before importing ``cuquantum``.