Built alone from an empty CARGO_HOME, its tests passed, and flowrsc checked, ran and exported a document from the conformance corpus; the export built alone. Co-Authored-By: Claude Opus 5.5 <[email protected]>
40 lines
3.5 KiB
Markdown
40 lines
3.5 KiB
Markdown
# flowrs-instruments: where the ported material came from
|
||
|
||
flowrs-instruments is Apache-2.0. Most of it is flowRS's own. What came from elsewhere:
|
||
|
||
## The simulated bench (`src/sim/`), from LabCraft
|
||
|
||
LabCraft (<https://github.com/corail-labs/labcraft>, "a graphical dataflow programming language
|
||
and IDE, built in pure Rust") is MIT OR Apache-2.0 (its `Cargo.toml`, `NOTICE`, `LICENSE-MIT`,
|
||
`LICENSE-APACHE`). Read at commit `22b8dff` (2026-11-08). flowRS takes it under the MIT licence;
|
||
the notice is in `LICENSES/LabCraft-MIT.txt`, and both of its licence texts sit beside the
|
||
copied files in `data/sim/labcraft/`.
|
||
|
||
| flowRS file | Came from | What was taken | Licence |
|
||
|---|---|---|---|
|
||
| `data/sim/labcraft/*.toml` | `libs/visa/sim/*.toml` | Copied unchanged: the fifteen simulated benches | MIT |
|
||
| `data/sim/labcraft/LICENSE-MIT`, `LICENSE-APACHE` | `LICENSE-MIT`, `LICENSE-APACHE` | Copied unchanged | — |
|
||
| `src/sim/noise.rs` | `libs/visa/simulation.md` §3; `SplitMix64` in `tools/lcf-poc/lcfpoc/sim.py` | The noise generator and the sum of twelve uniforms, bit for bit | MIT |
|
||
| `src/sim/time.rs` | `simulation.md` §3–4 | The clock in whole nanoseconds, the conversion of a time, the six-decimal answer | MIT |
|
||
| `src/sim/file.rs` | `simulation.md` §1–3, §5, §7; `check_keys`, `number`, `text`, `table`, `array`, `error_entry`, `command_key`, `Quantity.__init__`, `Instrument.__init__`, `World.load`, `World.check_sources` in `sim.py` | The file's keys, their types and ranges, and the refusals `visa:S001`…`visa:S011` with their meaning | MIT |
|
||
| `src/sim/instrument.rs` | `simulation.md` §3–4; `Quantity.own_value`, `true_value`, `read`, `set`, `Instrument.push_error`, `execute`, `command_text` in `sim.py` | A quantity's true value and its ramp, a write that starts a move, the order a command is answered in, the error queue and its overflow | MIT |
|
||
| `src/sim/mod.rs` | `simulation.md` §4, §6, §9; `World.open`, `wait`, `advance` in `sim.py`; `_send`, `_receive` in `tools/lcf-poc/lcfpoc/stdlib.py` | Sessions, `-410` for an unread answer, the read that waits for its timeout, VISA's error codes, `describe` | MIT |
|
||
| `src/sim/tests.rs` | `class Simulation` in `tools/lcf-poc/tests/test_poc.py` | The cases of its tests (the refusal table, the answers of §4, the clock, the ramp), rewritten for this code; the expected values are LabCraft's own published ones and those of `tools/benchsim/oracle.py`, an independent reckoning written from the spec | MIT |
|
||
| `spec/flowrs-bench-sim-1.md` §1–10 | `simulation.md` §1–10 | The contract, adapted: LabCraft's text where flowRS behaves as LabCraft does | MIT |
|
||
|
||
What flowRS added (spec §11): SCPI matching, a catalogue `model` and `follows`, `scale`,
|
||
`offset`, `clamp`, `min`/`max`, ranges and overload, switches and `routes`, waveforms and
|
||
statistics, `faults.delay` and `faults.hang_ms`, `queue_depth`, `reset`, the strict LabCraft
|
||
reading, and every `sim:` code. None of it is in LabCraft.
|
||
|
||
## pyvisa-sim's file format (`src/sim/pyvisa.rs`)
|
||
|
||
pyvisa-sim (<https://github.com/pyvisa/pyvisa-sim>) is MIT. The reader follows its YAML format
|
||
(spec 1.0 and 1.1: devices, dialogues, properties with getters, setters and specs, error
|
||
queues, status registers, resources) and its documented matching order. No code of it is
|
||
copied; it is not linked, and flowRS's own `tools/scpi-sim/bench.yaml` is the file the tests
|
||
read. The canonical SCPI form is the one `tools/scpi-sim/bridge.py` (flowRS's) applies.
|
||
|
||
## The catalogue (`data/*.json`)
|
||
|
||
Facts from PyMeasure and python-ivi (both MIT): see `NOTICE`.
|