v0.6.0
- Breaking (#175):
ElementRef.rowisOption<usize>, the honest form of the
0.5.1 wire semantics.Noneaddresses by identity alone (refs built with
by_source_uid); the private wire-presence shim (wire_row()) is gone, and
rowitself says whether the wire carried one. The.pio.jsonwire format
is unchanged. The other break collected in #175, keyed-object addressing for
multiconductor operating point updates, needs design and moves to the 1.0
window (#196). - C ABI: the package payload extraction inverses land as additive symbols (no
ABI version change; probe the symbols like the other feature surfaces):
pio_package_to_balanced_networkandpio_package_to_multiconductor_network
materialize an owned network handle from a parsed.pio.jsonpackage handle,
the inverses of thepio_package_from_*constructors. A handle built from a
payload retains no source text, so a same-format write is a fresh
serialization rather than a byte-exact echo; the multiconductor payload's
parse warnings ride along. - C ABI:
pio_to_json/pio_from_jsonare the function form of the balanced
model JSON (byte identical to thepowerio-jsonwriter); the format token
remains as a compatibility alias for file based workflows. This is the
additive half of #194; retiring the token waits for 1.0. - C ABI:
pio_dist_to_json/pio_dist_from_jsonserialize a distribution
handle to its model JSON and back in one call each: the same object a
.pio.jsondocument carries undermodel.multiconductor_network, without
the surrounding document. Bindings materialize element tables with this
instead of building a throwaway package; it is not a case format (the
converter, CLI, and inference do not know it), so BMOPF JSON remains the
distribution JSON exchanged with other tools. - C ABI:
pio_classify_strclassifies in-memory JSON by the same top level
markers the transmission parser's.jsonsniffing uses, and recognizes
.pio.jsonenvelopes:transmission:<format>,distribution:<format>,
package,ambiguous, orunknown, size-then-fill. Bindings can route a
bare.jsonbefore choosing a parser instead of matching error text. - The JSON classifier reports a
.pio.jsonenvelope as its own outcome
(routing::JsonClass), so every consumer handles it: the CLI, the Python
readers, and the Pythonclassify_json_textnow name the package surface
for an envelope instead of a generic cannot-infer error (or, for the Python
string reader, a MATPOWER syntax error). Envelope detection requires
model_kindto bebalancedormulticonductor, so a case document
carrying those key names with other values still classifies as a case, and
classification parses the document once. - Directed errors at the transmission boundary: a
.dsspath, a distribution
fromtoken (dss/pmd/bmopf), and a.pio.jsonenvelope handed to the
balanced parser now name the surface that reads them instead of a generic
unknown-format message.
What's Changed
- Document what the .pio.json format is and how it relates to BMOPF by @samtalki in #177
- Add design chapters for geographic data and the study block by @samtalki in #179
- Package payload inverses, JSON classifier entry point, directed boundary errors by @samtalki in #187
Full Changelog: v0.5.1...v0.6.0