Skip to content

v2.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Oct 09:47
· 30 commits to main since this release
5e8f209

Piccolo v2.2.0

Diff since v2.1.0

Changes

  • The quantum template integrator defaults flipped from the BilinearIntegrator placeholder to the structure-exploiting native tier: HermitianExponentialIntegrator (unitary/ket), NonHermitianExponentialIntegrator (density), and SplineIntegrator for the spline method. BilinearIntegrator remains fully selectable; the CubicSplinePulse+Bilinear pairing still errors by design.
  • The default solver backend is now MadNLP (via DirectTrajOpt 0.11's default, with its QualityFunctionUpdate barrier); Ipopt remains fully selectable via solve!(prob; options = IpoptOptions(...)).
  • Specs: the solver backend is now part of the declared contract (:madnlp default, :ipopt selectable) with a runtime declared==executed coherence assertion; the specs corpus wire forms re-frozen accordingly. Unpinned historical specs' hashes change; persisted result.toml specs carry explicit backends and stay reproducible.

Added

  • The adjoint-robustness objective family and RobustControlProblem
  • The integrators_spline family (open-core: multiket/multidensity/sampling spline integrators, interval coefficients, VJP/JVP machinery)
  • Per-member endpoint fidelity constraints for SamplingProblem
  • GaussianPulse carries the family's drive_name field (restores its NamedTrajectory conversion)

Fixed

  • Eleven real defects from the coverage campaign: the exponential assembly's globals threading and map-before-triu ordering; permuted ∂c/∂θ global columns in density/multidensity Jacobians; a time-warp BoundsError in _global_full_cols; the sampling constructors' global_data Dict-form TypeError in both integrator families; cubic multidensity sampling members silently dropping drives; ModulatedDrive's dynamics_operator crash; SamplingProblem's integrator-kwarg type-block (all four documented shapes now accepted); MinimumTimeProblem's density-goal lockout; GaussianPulse's missing field
  • The test suite's assertion-at-cutoff family hardened: converge-then-assert with loud status assertions — the suite is now solver-guaranteed rather than lucky

Merged pull requests:

  • fix(#326): complete the SplineIntegrators re-export seam — moved names unreachable at top level (#327) (@aarontrowbridge)
  • feat(321): HermitianExponentialIntegrator warp column — derived-Δt dynamics with exact duration sensitivities (TR Phase 1b) (#328) (@aarontrowbridge)
  • feat(3c): spline-shape constraint family + Hermite primitives + bending regularizer to Piccolo (open-core slice 3c) (#329) (@aarontrowbridge)
  • docs(#330): demote warp-docstring @refs to code ticks (NT names render nowhere downstream) (#331) (@aarontrowbridge)
  • feat(3d): adjoint-robustness objective family + RobustControlProblem to Piccolo (open-core slice 3d) (#332) (@aarontrowbridge)
  • chore(deps): update DataInterpolations requirement from 8.9 to 8.9, 10.1 (#333) (@dependabot[bot])
  • fix(sampling): re-land per-member endpoint fidelity constraints (#339) (#340) (@jeonghun-jj-lee)
  • fix(operators): ModulatedDrive dynamics_operator crash + coverage reconciliation fills (#345) (#346) (@aarontrowbridge)
  • docs(ci): pin docs template by commit SHA (#351) (#352) (@aarontrowbridge)
  • test(coverage): E1 integrators_spline — family to 90.2% reachable, real multidensity-cubic bug fixed (#347) (#353) (@aarontrowbridge)
  • test(coverage)+fix: E2 tails to 99.7%+, five real bugs — globals assembly, permuted columns, warp BoundsError (#348) (#354) (@aarontrowbridge)
  • test(coverage)+fix: E3 drift fill, three real bugs, the measurement policy calls (#349) (#355) (@aarontrowbridge)
  • feat(334): finish the BilinearIntegrator demotion — HE/NHE/Spline native defaults, three suite reds diagnosed (#357) (#359) (@aarontrowbridge)
  • feat(360): inherit the DTO-0.11 MadNLP default — compat bump, the specs dual-backend contract, true-default proof (#360) (#363) (@aarontrowbridge)
  • test(358): harden the assertion-at-cutoff family — converge-then-assert, never lucky (#358) (#364) (@aarontrowbridge)
  • release: v2.2.0 bump (#356) (#365) (@aarontrowbridge)

Closed issues:

  • [unitaryDESIGN] Visual Design of a Bosonic Qubit in Wigner Function Space (#57)
  • [unitaryDESIGN] Documentation Improvement for AI Agents (#61)
  • fidelity needs inspection (#106)
  • propagate kwargs for plot_unitary_populations (#123)
  • Re-export seam gap: unitary_rollout_trajectory (and spline-block siblings) unreachable at top level post-3b (#326)
  • docs: warp_plumbing docstrings carry @refs to NT names that render nowhere downstream (sync_timesteps!, ddeltats_dparams) (#330)
  • Demote BilinearIntegrator from template defaults — quantum templates flip to structure-exploiting integrators (3b/3a natives) (#334)
  • SamplingProblem: per-member endpoint fidelity constraints regressed by Specs Phase 1b rebase (#259) (#339)
  • Reconcile codecov coverage (badge 83%) with the campaign's measured ~96% (#345)
  • Coverage cluster E1: the integrators_spline family — 16 files, 1930 misses, five at 0% (#347)
  • Coverage cluster E2: adjoint-robustness, exponential tail, spline constraints (~524 misses) (#348)
  • Coverage cluster E3: September drift, rollout lanes, dead code, and the measurement policy calls (#349)
  • docs(ci): pin docs template by commit SHA (tag-rev fetch breaks under Pkg ≥1.13) (#351)
  • Cut v2.2.0 (E-cluster fixes live in 2.1.0) + shipped-env bump + template re-verify (#356)
  • Finish the BilinearIntegrator demotion (#334) + inherit the MadNLP default — the one-release v2.2.0 surface (#357)
  • Harden the assertion-at-cutoff test family (pre-v2.2.0) — converge-then-assert, never lucky (#358)
  • Inherit the MadNLP default (post-DTO-v0.11.0) — the specs gate, compat bump, and the true-default regime proof (#360)