packages feed

stim-parser-0.4.0.0: CHANGELOG.md

# Revision history for stim-parser

## 0.4.0.0 -- 2026-07-20

* Add Pauli-target support for `OBSERVABLE_INCLUDE` and `DETECTOR`
  annotations.
  - New `AnnTarget` sum type: `AnnQ Ind | AnnRec Rec | AnnPauli Pauli Ind`.
  - `Ann` now stores `[AnnTarget]` instead of `[Q]`.
  - Single-qubit Pauli targets such as `X0`, `Y1`, `Z2` are accepted and
    preserved, matching Python Stim behavior.
  - Mixed `rec[-k]` and Pauli targets are supported.
  - The `*` combiner remains unsupported inside annotations.
* This is a **breaking API change**. Downstream code pattern-matching on
  `Ann` or constructing annotation values needs to use `AnnTarget`.

## 0.3.0.0 -- 2026-07-20

* Add optional tag support for DEM detector and observable declarations.
  Stim's DEM format allows `detector[tag](...) D#` and
  `logical_observable[tag] L#`; these are now parsed and exposed in the AST.
  This is a **breaking API change**: `DEMDetector` and `DEMObservable`
  gained new `ddTag` / `doTag` fields of type `Maybe Tag`.
* Move `parseTag` from `StimParser.Parse` to `StimParser.ParseUtils` so it
  can be shared by the DEM parser. Modules importing `parseTag` from
  `StimParser.Parse` should import it from `StimParser.ParseUtils` instead.
* Add `Eq` instance for `StimParser.Expr.Tag`.
* Add DEM parser regression tests for tagged detectors/observables and
  rejection of double tags.

## 0.2.0.1 -- 2026-07-18

* Fix noise-channel parsing order in `parseStim`.
  Noise-channel names such as `X_ERROR`, `Y_ERROR`, `Z_ERROR`, and
  `I_ERROR` share a prefix with gate names (`X`, `Y`, `Z`, `I`). The
  top-level dispatcher now tries noise before gates, preventing the gate
  parser from partially consuming these names and leaving the rest of the
  input orphaned.
* Add regression tests for noise-channel parsing through `parseStim`.

## 0.2.0.0 -- 2026-04-01

* Add DEM (Detector Error Model) parsing support.
  New modules: `StimParser.DEM.Expr`, `StimParser.DEM.Parse`.
* Add `flattenDEM` utility to expand `repeat` blocks and apply
  `shift_detectors` coordinate/ID shifts.
* Migrate all floating-point types from `Float` to `Double` for
  higher precision probability representation.
* Move `parseExhaust`, `parseTuple`, and `parseTupleFloat` to
  `StimParser.ParseUtils` as shared lexer utilities.
* Add `parseNumber` for parsing bare integers or floats as `Double`.
* Expand test suite with DEM parser and flattening tests.

## 0.1.0.0 -- 2026-03-31

* Initial release.
* Parse STIM quantum circuit files into a Haskell AST.
* Supported circuit elements:
    * Gates (Pauli, single-qubit Clifford, two-qubit Clifford,
      collapsing gates)
    * Measurements (M, MXX, MYY, MZZ, MRX, MRY, MRZ, MX, MY, MZ, MR)
    * Generalized Pauli Product gates (MPP, SPP, SPP_DAG)
    * Noise channels (DEPOLARIZE, PAULI_CHANNEL, X/Y/Z_ERROR,
      CORRELATED_ERROR, etc.)
    * Annotations (DETECTOR, OBSERVABLE_INCLUDE, QUBIT_COORDS,
      SHIFT_COORDS, TICK, MPAD)
    * REPEAT blocks
    * Tags on instructions
* `StimParser.Trans.flattenQ` transform to resolve `rec[]` references
  into absolute qubit indices, with coordinate shift support.
* Two example executables: `stim-parser-example`,
  `stim-parser-unit-example`.
* Test suite covering expression types, parsers, parse utilities,
  and transformations.