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

Add structure for multiple Rust crates #9742

Merged
merged 4 commits into from
Mar 7, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ jobs:
stestr run
# We set the --source-dir to '.' because we want all paths to appear relative to the repo
# root (we need to combine them with the Python ones), but we only care about `grcov`
# keeping the `src/*` files; we don't care about coverage in dependencies.
grcov . --binary-path target/debug/ --source-dir . --output-type lcov --output-path rust.info --llvm --branch --parallel --keep-only 'src/*'
# keeping the `crates/*` files; we don't care about coverage in dependencies.
grcov . --binary-path target/debug/ --source-dir . --output-type lcov --output-path rust.info --llvm --branch --parallel --keep-only 'crates/*'
env:
QISKIT_TEST_CAPTURE_STREAMS: 1
QISKIT_PARALLEL: FALSE
Expand Down
84 changes: 42 additions & 42 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

46 changes: 9 additions & 37 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,42 +1,14 @@
[package]
name = "qiskit-terra"
[workspace]
members = ["crates/*"]

# This has no meaning until we're on Rust 1.64, but once we get there, the subpackages will be able
# to inherit from this rather than needing to duplicate its content themselves. Until we get there,
# keep this in sync with each subpackage `Cargo.toml`'s `package` key.
[workspace.package]
version = "0.24.0"
edition = "2021"
# Keep in sync with README.md and rust-toolchain.toml.
rust-version = "1.61"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[lib]
name = "qiskit_accelerate"
crate-type = ["cdylib"]

[dependencies]
rayon = "1.7"
numpy = "0.18.0"
rand = "0.8"
rand_pcg = "0.3"
rand_distr = "0.4.3"
ahash = "0.8.3"
num-complex = "0.4"
num-bigint = "0.4"
rustworkx-core = "0.12"

[dependencies.pyo3]
version = "0.18.1"
features = ["extension-module", "hashbrown", "num-complex", "num-bigint", "indexmap"]

[dependencies.ndarray]
version = "^0.15.6"
features = ["rayon"]

[dependencies.hashbrown]
version = "0.13.2"
features = ["rayon"]

[dependencies.indexmap]
version = "1.9"
features = ["rayon"]
rust-version = "1.61" # Keep in sync with README.md and rust-toolchain.toml.
license-file = "LICENSE.txt"

[profile.release]
lto = 'fat'
Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ include test/python/notebooks/*.ipynb

include Cargo.toml
include Cargo.lock
recursive-include src *
recursive-include crates *
41 changes: 41 additions & 0 deletions crates/accelerate/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[package]
name = "qiskit_accelerate"
# The following options can be inherited with (e.g.) `version.workspace = true` once we hit Rust
# 1.64. Until then, keep in sync with the root `Cargo.toml`.
version = "0.24.0"
edition = "2021"
rust-version = "1.61"
license-file = "LICENSE.txt"
jakelishman marked this conversation as resolved.
Show resolved Hide resolved

[lib]
name = "qiskit_accelerate"
crate-type = ["cdylib"]

[dependencies]
rayon = "1.7"
numpy = "0.18.0"
rand = "0.8"
rand_pcg = "0.3"
rand_distr = "0.4.3"
ahash = "0.8.3"
num-complex = "0.4"
num-bigint = "0.4"
rustworkx-core = "0.12"

# The base version of PyO3 and setting a minimum feature set (e.g. probably just 'extension-module')
# can be done in the workspace and inherited once we hit Rust 1.64.
Comment on lines +25 to +26
Copy link
Member

Choose a reason for hiding this comment

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

Well this assumes we'll never have shared rust crates across our Python extension crates. A use case I could see is maybe some parser utils for OQ3 and OQ2 that we want to reuse between two separate crates (this is similar to how we use rustworkx-core in rustworkx).

Copy link
Member Author

@jakelishman jakelishman Mar 7, 2023

Choose a reason for hiding this comment

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

Each subpackage still has to opt in to inherit a dependency, such as by

[dependencies]
pyo3 = {"workspace" = true, "features" = ["additive", "with", "inherited", "ones"]}

If you don't have <pkg>.workspace = true, it's not inherited.

[dependencies.pyo3]
version = "0.18.1"
features = ["extension-module", "hashbrown", "indexmap", "num-complex", "num-bigint"]

[dependencies.ndarray]
version = "^0.15.6"
features = ["rayon"]

[dependencies.hashbrown]
version = "0.13.2"
features = ["rayon"]

[dependencies.indexmap]
version = "1.9"
features = ["rayon"]
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 3 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@
"Documentation": "https://qiskit.org/documentation/",
"Source Code": "https://github.com/Qiskit/qiskit-terra",
},
rust_extensions=[RustExtension("qiskit._accelerate", "Cargo.toml", binding=Binding.PyO3)],
rust_extensions=[
RustExtension("qiskit._accelerate", "crates/accelerate/Cargo.toml", binding=Binding.PyO3)
],
zip_safe=False,
entry_points={
"qiskit.unitary_synthesis": [
Expand Down