Source code for scalerqec.interface

#!/usr/bin/env python3
"""
bits_split.py

Read a text file whose lines are 0-1 bit-strings.  For every line
    abc…xyz
all but the final bit ("abc…y") become one row of the **state matrix**,
and the final bit ("z") becomes one row of the **observable vector**.

Example
-------
Input file lines:
    000000000
    010101011
    111111110

Output (JSON):
[
  [[false,false,false,false,false,false,false,false],
   [false,false,false,false,false,false,false,false],
   [true,true,true,true,true,true,true,true]],
  [[false],[true],[false]]
]
"""

import sys
import json
from pathlib import Path


[docs] def parse_line(line: str): """Return (state_row, observable_row) or None for blank lines.""" bits = line.strip() if not bits: # skip empty / whitespace-only lines return None *state_chars, obs_char = bits # unpack: last char is observable state_row = [c == "1" for c in state_chars] observable_row = [obs_char == "1"] return state_row, observable_row
[docs] def read_file(path: Path): """Produce two nested-list structures: states and observables.""" states, observables = [], [] with path.open("r", encoding="utf-8") as f: for ln in f: parsed = parse_line(ln) if parsed is None: continue s, o = parsed states.append(s) observables.append(o) return states, observables
[docs] def main(): if len(sys.argv) != 2: print( f"Usage: {Path(sys.argv[0]).name} <bitstring_file>", file=sys.stderr, ) sys.exit(1) infile = Path(sys.argv[1]) if not infile.is_file(): print(f"Error: '{infile}' is not a readable file.", file=sys.stderr) sys.exit(1) states, observables = read_file(infile) # Serialize as JSON so it’s valid Python *and* easy to reuse elsewhere print(json.dumps([states, observables]))
if __name__ == "__main__": main()