SID reglog parsing, tokenization, and macro transforms extracted from the preframr research codebase.
Project description
preframr-tokens
SID reglog parsing, tokenization, and macro transforms extracted from the preframr research codebase.
Torch-free. The training-side concerns (model, loss, DataLoader,
predict) live in the main preframr repo; this package contains the
stable parsing + encoding layer that produces the parsed parquets +
unigram tokenizer alphabet that downstream training consumes.
Install
pip install preframr-tokens
Optional extras:
preframr-tokens[audio]— pullspreframr-audiofor the lossy-macro round-trip check (Transform.round_trip_checklazy-importspreframr_audio.fidelity.assert_dfs_render_equivalentfor anyTIER != "bit_exact"macro). Skip if you only use the parsing / tokenisation / constrained-decode paths.
Modules
preframr_tokens.reglogparser-- SID dump → parsed dataframe pipeline.RegLogParser.preframr_tokens.regtokenizer-- alphabet build + unigram tokenizer fit.RegTokenizer.preframr_tokens.macros.*-- declarativeTransformregistry plus the macro / pre-norm passes (slope, preset, hard_restart, legato_per_cluster, voice_block_order, ctrl_bigram, loop, etc.). Macros declareOP_CODES,LOSS_TIER,SUBSTITUTABLE_OPS,MUST_FOLLOW, etc. on their classes;pipeline_check.validate_pipeline_specvalidates a pipeline declaratively.preframr_tokens.stfconstants-- SID register IDs, op codes, pandas dtypes, PAL clock constants.preframr_tokens.engine_fingerprint-- engine clustering for cross-engine evaluation pinning.preframr_tokens.coarsen_pass-- tracker-export pass (lossy audio-domain bucketing).preframr_tokens.dump_meta-- per-dump metadata sidecar with code-hash staleness gate.preframr_tokens.reglog_helpers-- voice-relative reg matchers, dtype tightening, and re-exports ofwrapbits(now inutils) and the palette sidecar IO (now inpalette_io) for back-compat. New consumers should import from the source modules.preframr_tokens.palette_io-- JSON sidecar load/dump for the engine-fingerprint / engine-fp-clusterdf.attrs(extracted fromreglog_helpers).preframr_tokens.macros.roles-- single source of truth for(op, subreg)→ role classification.distance_pair_role,slope_subreg_role,frame_weight_role, plus theDISTANCE_PAIR_OPStable and theDistancePairSpecdataclass.preframr_tokens.vocab_signature--VocabSignatureclass. Single- pass per-vocab-id (loss-tier, frame-time-weight) computation. Thetier_classifyandtoken_weightingfree functions are thin wrappers; consumers that need both should build aVocabSignaturedirectly to avoid two passes over the vocab.preframr_tokens.alphabet_projection-- eval-set atom projection table.preframr_tokens.reg_mappers--FreqMapper(PAL clock + cents quantization).preframr_tokens.constrained_decode-- per-step structural-validity mask for sampling-time logit guarding. Pure numpy state machine; consumers (torch users) apply the returned bool mask with a singlemasked_fillat the boundary.preframr_tokens.blocks-- block iteration + materialization helpers:iter_voiced_blocks,materialize_block_array,parser_worker,glob_dumps,reg_widths_path,self_contained_prompt_df, plus theSeqMetadataclass andparse_eval_reglogs/LEGACY_EVAL_SUBSET_NAMEfor eval-subset routing. Torch-free; main repo's RegDataset wraps the outputs in DataLoaders.preframr_tokens.audit_primitives-- pure-Python token-level audit functions:tier_accuracy(per-tier hit-rate + content/ structural ratio),detect_tail_cycle(loop-collapse detector),distinct_n(n-gram diversity). Used by the generalization-gate callback in main repo and by post-hoc audit scripts.preframr_tokens.parse_runner--write_df(args, logger, dump_file)parse_corpus(args, logger)parallel dump-parsing orchestrator. Main-repopreframr/parse.pyis a thin argparse shim around this.
preframr_tokens.corpus--Corpusclass: torch-free corpus orchestration owning the RegTokenizer + reg_widths + tokenize-stage metadata. Methodsload_dfs,make_tokens,encode_and_save_cached_blocks,try_preload_from_disk,preload,iter_block_seqs,iter_predict_block_seqscover the full parse → tokenize → load pipeline up to the point where blocks need to be routed into a torchBlockMapper(main repo's RegDataset is a thin adapter that does that routing).
Library-only
No CLI entry points. Consumers build their own (the main preframr
repo's parse.py and stftokenize.py are simple wrappers that
construct RegLogParser / RegTokenizer from an argparse.Namespace).
API surface
Design principle: expose decisions, not facts. Whenever a
consumer would otherwise import raw stfconstants (reg ids, op
codes, subreg constants) and re-implement a classification switch
on top of them, that's a sign the helper should live here instead.
Helpers ride the same code as the parser/tokenizer, so the
classification matches the data by construction.
Full inventory of what the main preframr repo currently consumes
plus the narrowing opportunities still on the table is in
API_SURFACE.md. Recent additions in that vein:
preframr_tokens.tier_classify—vocab_id_tier,build_vocab_tier_ids,build_vocab_tier_map,CONTENT_TIER. Replaces ad-hoc reg/op tier classification in consumers.preframr_tokens.token_weighting.vocab_frame_weights— per-vocab audio-frame-time weighting. Replaces ad-hoc BACK_REF / DO_LOOP / SLOPE / DELAY / FRAME val accounting in consumers.preframr_tokens.vocab_signature.VocabSignature— single-pass bundle of both of the above. Consumers that need bothtier_idsandframe_weightsshould construct this directly.preframr_tokens.reglog_helpers.read_initial_irq— first-frame diff lookup with PAL default. Replaces thedf[df["reg"] == FRAME_REG]dance in consumers.preframr_tokens.constrained_decode.tail_charge_for_prompt— cycle cost of real-reg writes after the last frame marker. Replaces the manualis_real_reg[tail].sum() * MIN_DIFFarithmetic + the matchingMIN_DIFFimport in consumers.preframr_tokens.constrained_decode.frame_marker_count— formerly_frame_marker_count; promoted (underscore alias dropped).preframr_tokens.constrained_decode.StreamState.compute_invalid_mask— formerly_compute_invalid; promoted (underscore alias dropped).preframr_tokens.macros.transform.ensure_default_transforms_registered— call before any_REGISTRYlookup to populatetransforms_audio_bit_exact/transforms_bit_exactside effects. Idempotent. Replaces the duplicated import-and-cache dance.preframr_tokens.corpus.TokenizeMeta— typed snapshot of the tokenize-stage metadata previously carried as an untyped dict onCorpus._tokenize_meta.preframr_tokens.constrained_decode.VocabArrays—dictsubclass with attribute access (a.is_real_regalongsidea["is_real_reg"]). Return type ofprecompute_vocab_arrays/precompute_subtoken_arrays; external dict consumers see no change.preframr_tokens.macros.transform.PassBackedTransform,RowExpandingTransform— public bases forTransformsubclasses that wrap aMacroPassforforward()and (optionally) a decoder forexpand_atom(). Hoisted fromtransforms_bit_exact.pyso other transform files can reuse the pattern.preframr_tokens.macros.transform_registry(internal) — holds the shared pipeline-spec primitives (_REGISTRY,PipelineEntry,PipelineConfigError,_normalize_spec) sotransform.pyandpipeline_check.pycan both depend on them without forming an import cycle. Consumers should keep importing frompreframr_tokens.macros.transform, which re-exports.preframr_tokens.utils.to_int64_arrays(df, *names, fillna={col: val})— extract named columns as int64 numpy arrays with explicit per-column NaN fill values. Replaces 10+ ad-hocdf[col].fillna(...).astype(np.int64).to_numpy()triples.
Stability
Library follows semver from v1.0. Pre-1.0 releases may break API as the preframr codebase evolves. Token-alphabet shape changes bump major version since they invalidate downstream checkpoints.
Public surface (semver-promised once v1.0):
- Classes:
RegLogParser,RegTokenizer,Corpus,TokenizeMeta,StreamState,PendingSlot,VocabArrays,VocabSignature,Transform(+registerdecorator,PipelineEntry,TransformPipeline,PassBackedTransform,RowExpandingTransform),DistancePairSpec. - Decision helpers: see
API_SURFACE.md"Decision helpers" section. - Routines:
parse_corpus,precompute_vocab_arrays,precompute_subtoken_arrays,prepare_df_for_audio,remove_voice_reg,validate_back_refs,validate_pattern_overlays,frame_marker_count,tail_charge_for_prompt,read_initial_irq,ensure_default_transforms_registered,distance_pair_role,slope_subreg_role,frame_weight_role,to_int64_arrays. - Boundary constants:
PAD_ID,MODEL_PDTYPE,DUMP_SUFFIX,LEGACY_EVAL_SUBSET_NAME,DEFAULT_IRQ_CYCLES,LOSS_TIER_NAMES,DISTANCE_PAIR_OPS,CONTENT_TIER.
Back-compat aliases scheduled to drop
The internal aliases (_frame_marker_count, _compute_invalid,
_LOSS_TIER_NAMES) and the public MIN_DIFF re-export have been
removed this round; consumers have cut over to the public names.
What remains is the reglog_helpers re-export set, which is blocked
on a main-repo cutover of render_play.py.
| alias | replacement | location |
|---|---|---|
reglog_helpers.dump_palettes_attrs |
palette_io.dump_palettes_attrs |
preframr_tokens/reglog_helpers.py |
reglog_helpers.load_palettes_attrs |
palette_io.load_palettes_attrs |
preframr_tokens/reglog_helpers.py |
reglog_helpers.wrapbits |
utils.wrapbits |
preframr_tokens/reglog_helpers.py |
Symbols prefixed _ are package-internal and may change without
notice (current consumers that reach into them are tracked in
API_SURFACE.md as "leaks to clean up").
License
Apache 2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file preframr_tokens-0.10.0.tar.gz.
File metadata
- Download URL: preframr_tokens-0.10.0.tar.gz
- Upload date:
- Size: 243.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6270aa9965f7bee43ac5e366eb008d78420edeb5979e300b691e28694afc8147
|
|
| MD5 |
6407730f132f21d75364dbe0a0abc540
|
|
| BLAKE2b-256 |
5127ad0f1950a6c6d77b6b35ca667f52300d8b7073efa677bb7ae1db05f7c1fb
|
Provenance
The following attestation bundles were made for preframr_tokens-0.10.0.tar.gz:
Publisher:
release.yml on anarkiwi/preframr-tokens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
preframr_tokens-0.10.0.tar.gz -
Subject digest:
6270aa9965f7bee43ac5e366eb008d78420edeb5979e300b691e28694afc8147 - Sigstore transparency entry: 1616393560
- Sigstore integration time:
-
Permalink:
anarkiwi/preframr-tokens@1e7d8112da0313a0757ce6b74aadc5a17927360e -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1e7d8112da0313a0757ce6b74aadc5a17927360e -
Trigger Event:
push
-
Statement type:
File details
Details for the file preframr_tokens-0.10.0-py3-none-any.whl.
File metadata
- Download URL: preframr_tokens-0.10.0-py3-none-any.whl
- Upload date:
- Size: 146.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81765b7bf7ab69dc8cc534f1ff5d1b16af16ce63a6a5ae06b0c69838b9fca0a8
|
|
| MD5 |
fb55c1616d1034a9048beca7c3352305
|
|
| BLAKE2b-256 |
86a887894a7e77238d1a39030c90603bf2079769226a6ae9c2ab3aaff8ae9ac2
|
Provenance
The following attestation bundles were made for preframr_tokens-0.10.0-py3-none-any.whl:
Publisher:
release.yml on anarkiwi/preframr-tokens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
preframr_tokens-0.10.0-py3-none-any.whl -
Subject digest:
81765b7bf7ab69dc8cc534f1ff5d1b16af16ce63a6a5ae06b0c69838b9fca0a8 - Sigstore transparency entry: 1616393847
- Sigstore integration time:
-
Permalink:
anarkiwi/preframr-tokens@1e7d8112da0313a0757ce6b74aadc5a17927360e -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1e7d8112da0313a0757ce6b74aadc5a17927360e -
Trigger Event:
push
-
Statement type: