Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First pass of support for C++ operators #2511

Open
wants to merge 35 commits into
base: experimental/operators
Choose a base branch
from

Conversation

anthony-santana
Copy link
Collaborator

Description

This is an initial commit to the experimental branch containing a first pass of work towards operator support in C++

bmhowe23 and others added 5 commits January 13, 2025 08:05
This PR fixes an LLVM discrepancy in our Docker images vs our Python wheels. This should fix NVIDIA#1421 and NVIDIA#1799 for our Python wheels. (The Docker images were already correct.)
* Docs for trajectory simulation

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

* Fix spelling and code format

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

* Update mgpu hash: include fixes for 2434

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

* Update docs/sphinx/snippets/cpp/using/backends/trajectory.cpp

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>

* Update docs/sphinx/snippets/cpp/using/backends/trajectory.cpp

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>

* Update docs/sphinx/snippets/cpp/using/backends/trajectory_observe.cpp

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>

* Update docs/sphinx/snippets/cpp/using/backends/trajectory_observe.cpp

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>

* Update python/cudaq/runtime/observe.py

Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>

---------

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>
Signed-off-by: Thien Nguyen <58006629+1tnguyen@users.noreply.github.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
For small controlled ops, i.e., singly controlled, expand the gate
matrix and use cutensornetStateApplyTensorOperator.

Add CUDAQ_TENSORNET_CONTROLLED_RANK threshold to determine when cutensornetStateApplyControlledTensorOperator is used.
For MPS, this is fixed at 1 as it cannot handle gate ops with more than
2 qubits.

Add doc for the setting and also remove some stale notes about random
seeds in the docs.

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>
Copy link

copy-pr-bot bot commented Jan 15, 2025

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Copy link
Collaborator

@sacpis sacpis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM if all tests are running successfully.

1tnguyen and others added 3 commits January 18, 2025 07:14
…de (NVIDIA#2516)

* Fix a bug in default init of scratchpad: it must allocate memory after we've set the device

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

* Add test

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

* Add a check to prevent multiple allocate calls

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>

---------

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>
Signed-off-by: Pradnya Khalate <pkhalate@nvidia.com>
@sacpis sacpis force-pushed the dynamics_cpp_operators branch from 752fed1 to d55814d Compare January 21, 2025 17:11
khalatepradnya and others added 13 commits January 22, 2025 07:54
* Fix the behavior of `quera` backend with C++ frontend by showing appropriate error message.
  (Behavior prior to this change - default simulator was invoked)
* Tell nvq++ to generate glue for `quera`
* Simplify libraries - combine 'libcudaq-quera-qpu.so' and 'libcudaq-serverhelper-quera.so' into one.

Signed-off-by: Pradnya Khalate <pkhalate@nvidia.com>
Changes:

- cuda-quantum/cuquantum-mgpu!36: fix a bug in trajectory simulation

- cuda-quantum/cuquantum-mgpu!37: fix a bug in applyExpPauli: invalid
  value errors when the pauli word is acting on a subset of qubits.

Signed-off-by: Thien Nguyen <thiennguyen@nvidia.com>
* add skeleton of new API functions without connecting to docs yet

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* updates

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* boilerplate

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* clean up linking bug

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* adding schedule implementation

* fixing typo

* small updates

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* Cleaning up docs preview for PR #6.

* push initial tests that show memory leak in current translation to complex matrix

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* completely work around eigen in default elementary ops

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* storing changes

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* start to build out callback function class

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* working function wrapper implementation

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* implement complex matrix equality operator

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* push with broken to matrix overload

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix scoping issue found in to matrix

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fill out unit tests for to matrix overload

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* add skeleton of new API functions without connecting to docs yet

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* updates

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* boilerplate

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* clean up linking bug

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* initial scalar value support and tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* update to_value to evaluate to amtch python api

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* adding kwargs capability in C++ by using std::variant and std::bind

* renaming VariantArg to NumericType to match Python

* adding a std::variant returntype nad adjusting the test accordingly

* Cleaning up docs preview for PR #7.

* commit first draft of arithmetic against complex doubles

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* little build errors

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* call generator directly instead of evaluate in operator overloads

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* remove old constructor

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* copy constructor

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* push partially working arithmetic operations

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* comment back in tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* remove constructor that takes removed parameters member

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* still having memory issues

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* implement and test remaining pre defined elementary ops except displace and squeeze. implement complex matrix exponential

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix for segfault in copy constructor but still have memory issues from arithmetic

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* temp patch to get scalar arithmetic against complex doubles working. against doubles wrapped in functions still broken

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* potential fix for callback function going out of scope

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* confirm fix for scalar ops from functions and reenable tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* begin to support scalar against scalar ops and simplify other arithmetic definitions with macros

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* support for remaining arithmetic against other scalar ops except for assignment operators

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* add checks to ensure local variables are picked up fine in generator functions

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* clean up test file

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* full refactor to take a [arameter map with elementary operator implementation back under construction

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix elementary ops

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* start to manually merge in operator sum changes

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* camel case some things and underscore some others

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix build errors from header file

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* refactor implementation file names, delete unused dynamics.h, refactor unittests with new dynamics folder

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* storing large set of changes to dynamics folder structure and implementing more arithmetic

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* add cudaq tensor type

Signed-off-by: Alex McCaskey <amccaskey@nvidia.com>

* add uint8 tensor to python api

Signed-off-by: Alex McCaskey <amccaskey@nvidia.com>

* Update unittests/utils/tensor_tester.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update unittests/utils/tensor_tester.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update unittests/utils/tensor_tester.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/impls/xtensor_impl.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/impls/xtensor_impl.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/impls/xtensor_impl.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update python/runtime/utils/py_tensor.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/extension_point.h

Co-authored-by: Ben Howe <141149032+bmhowe23@users.noreply.github.com>
Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/extension_point.h

Co-authored-by: Ben Howe <141149032+bmhowe23@users.noreply.github.com>
Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/tensor.h

Co-authored-by: Ben Howe <141149032+bmhowe23@users.noreply.github.com>
Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/tensor.h

Co-authored-by: Ben Howe <141149032+bmhowe23@users.noreply.github.com>
Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/impls/xtensor_impl.cpp

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/tensor_impl.h

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/tensor_impl.h

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update runtime/cudaq/utils/details/tensor_impl.h

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Spelling fixes.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* push current state

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* Format

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Format

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Drop debug code.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Cleanup tensor types a tad.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Fix spelling

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Fix spelling and format python code

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Sort spelling allowlist

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Cleaning up docs preview for PR #9.

* more arithmetic support

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* Update spelling and formatting

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* more implementation and more tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* Update spelling and formatting

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* This is an attempt to sort out the different ownership models of tensor data.
The python stub for "take" needs to be implemented however.

The semantics are:

  - copy : the tensor object makes a copy of the data and owns the copy.
           i.e. there is a unique_ptr.
  - take : the tensor object steals a copy of the data from the caller.
           In order for this case to make sense, we want the caller to
           guarantee that the data is unique before we steal it. This
           can be done by forcing the client code to wrap the tensor
           data in a unique_ptr *before* the take call.
  - borrow :
           In this case, the tensor object has no ownership of the
           tensor data and just naively assumes the client will
           manage the data correctly. In this case, a raw pointer
           to the client's data is used.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Update the missing py_tensor code.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add handling for empty shape case.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add more python tests

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Add a take() with move semantics.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* fix product operator constructor issue and tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix more test more

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* cover all arithmetic

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* update before merging in tensor pr

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* Fix __init__ argument order so tests pass. The shape must come first.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Remove StateTensor. (Not used.)

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add more comments on how to use this stuff.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Added python tests and fixed some issues

* Merge with tensor

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* DCO Remediation Commit for Anna Gringauze <agringauze@nvidia.com>

I, Anna Gringauze <agringauze@nvidia.com>, hereby add my Signed-off-by to this commit: e78def4

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Add some boilerplate for tensor operators.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Make the compiler work a bit harder.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add move constructor.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Make sure the return values for operators work as expected.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* clang-format

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add override to dtor.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Add forward decls.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* More fussy templates.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Workaround warnings from g++.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Fix typos.

Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>

* Support copy semantics for Numpy 2.0

* DCO Remediation Commit for Anna Gringauze <agringauze@nvidia.com>

I, Anna Gringauze <agringauze@nvidia.com>, hereby add my Signed-off-by to this commit: 85fae37

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Try fixing doc gen and c++ compilation errors

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Add compilation test for nvcc

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* Remove temp file

Signed-off-by: Anna Gringauze <agringauze@nvidia.com>

* store changes

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* first pass of updating return types to cudaq tensor

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* store working version with tests before rebase

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix improper merge resolution issues

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* more issues with resolving merge

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* first pass of translation to matrix_2 with build errors fixed. now double checking tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix remaining artifacts from rebase

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix matrix checks for simple elementary op unit tests

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* first pass of implementing deeper matrix checks in tests. Have two files left to finish

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* fix copyright headers

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

* minor change to check verified commit

Signed-off-by: A.M. Santana <anthonys@nvidia.com>

---------

Signed-off-by: A.M. Santana <anthonys@nvidia.com>
Signed-off-by: Alex McCaskey <amccaskey@nvidia.com>
Signed-off-by: Eric Schweitz <eschweitz@nvidia.com>
Signed-off-by: Anna Gringauze <agringauze@nvidia.com>
Co-authored-by: Sachin Pisal <spisal@nvidia.com>
Co-authored-by: cuda-quantum-bot <cuda-quantum-bot@users.noreply.github.com>
Co-authored-by: Alex McCaskey <amccaskey@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: Ben Howe <141149032+bmhowe23@users.noreply.github.com>
Co-authored-by: Anna Gringauze <agringauze@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
* Removing base_operator class, as operator_sum will act as a base class

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
	* Aggregating parameters
	* Extracting documentation
	* Extracting positional and keyword arguments
	* Generating all quantum states for given degrees and dimensions
	* Permuting a given matrix
	* Canonicalizing degrees
* Adding test cases for the above functions
* Formatting

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
sacpis added 13 commits January 23, 2025 09:42
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
* Adding unitests for Rydberg hamiltonian operator
* Making evaluate function in scalar_operator const

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
* Using CUDA_C_64F data type for complex

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
  the cudensitymatElementaryOperator_t
* Fetching subspace_extents using elementary_op degrees
* Adding a vector with correct action duality

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Signed-off-by: Sachin Pisal <spisal@nvidia.com>
@sacpis sacpis force-pushed the dynamics_cpp_operators branch from 0ebeed5 to b592f8a Compare January 23, 2025 17:42
…apart for temp vector

Signed-off-by: Sachin Pisal <spisal@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants