• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Qiskit / qiskit / 10391255051
88%

Build:
DEFAULT BRANCH: main
Ran 14 Aug 2024 04:42PM UTC
Jobs 1
Files 862
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Aug 2024 03:35PM UTC coverage: 89.694% (-0.01%) from 89.706%
10391255051

push

github

web-flow
Allow immutable borrow to access `QuantumCircuit.parameters` (#12918)

* Allow immutable borrow to access `QuantumCircuit.parameters`

`QuantumCircuit.parameters` is logically a read-only operation on
`QuantumCircuit`.  For efficiency in multiple calls to
`assign_parameters`, we actually cache the sort order of the internal
`ParameterTable` on access.  This is purely a caching effect, and should
not leak out to users.

The previous implementation took a Rust-space mutable borrow out in
order to (potentially) mutate the cache.  This caused problems if
multiple Python threads attempted to call `assign_parameters`
simultaneously; it was possible for one thread to give up the GIL during
its initial call to `CircuitData::copy` (so an immutable borrow was
still live), allowing another thread to continue on to the getter
`CircuitData::get_parameters`, which required a mutable borrow, which
failed due to the paused thread in `copy`.

This moves the cache into a `RefCell`, allowing the parameter getters to
take an immutable borrow as the receiver.  We now write the cache out
only if we *can* take the mutable borrow out necessary.  This can mean
that other threads will have to repeat the work of re-sorting the
parameters, because their borrows were blocking the saving of the cache,
but this will not cause failures.

The methods on `ParameterTable` that invalidate the cache all require a
mutable borrow on the table itself.  This makes it impossible for an
immutable borrow to exist simultaneously on the cache, so these methods
should always succeed to acquire the cache lock to invalidate it.

* Use `RefCell::get_mut` where possible

In several cases, the previous code was using the runtime-checked
`RefCell::borrow_mut` in locations that can be statically proven to be
safe to take the mutable reference.  Using the correct function for this
makes the logic clearer (as well as technically removing a small amount
of runtime overhead).

* Use `OnceCell` instead of `Re... (continued)

50 of 53 new or added lines in 2 files covered. (94.34%)

17 existing lines in 2 files now uncovered.

67526 of 75285 relevant lines covered (89.69%)

365283.26 hits per line

Jobs
ID Job ID Ran Files Coverage
1 10391255051.1 14 Aug 2024 04:42PM UTC 0
89.69
GitHub Action Run
Source Files on build 10391255051
Detailed source file information is not available for this build.
  • Back to Repo
  • 2d3db9a6 on github
  • Prev Build on gh-readonly-queue/main/pr-12955-11e769f30de7edc56cc5c01f6a679c283989ad62 (#10388286711)
  • Next Build on main (#10394560985)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc