pen-stack 4.0.0__tar.gz → 4.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pen_stack-4.0.0 → pen_stack-4.0.1}/CHANGELOG.md +12 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/CITATION.cff +1 -1
- {pen_stack-4.0.0 → pen_stack-4.0.1}/PKG-INFO +2 -2
- {pen_stack-4.0.0 → pen_stack-4.0.1}/README.md +1 -1
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/__init__.py +1 -1
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/writer_verify.py +12 -9
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/PKG-INFO +2 -2
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pyproject.toml +1 -1
- {pen_stack-4.0.0 → pen_stack-4.0.1}/LICENSE +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/MANIFEST.in +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/bench/run.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/atlas_families.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/cargo_polish.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/datasets.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/delivery_rules.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/gates_v3.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/intent_weights.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/known_unknowns.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/llm.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/monitor_queries.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/rules/delivery.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/rules/fold.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/rules/payload.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/rules/reachability.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/score_axes.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/target_sites.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/write_types.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/BACKLOG.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/DEPLOY.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/INFRA.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/MCP.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/RELEASING.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/REPRO.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/agent.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/benchmark_circularity.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/cards/atlas.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/cards/durability.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/cards/safety.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/delivery.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/dissemination.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/environment.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/index.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/oracles.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/positioning.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/private_data_formats.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/quickstart.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/rules.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/scope.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/scorecard.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/uncertainty.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/verify.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/writer_verification.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/docs/wtkb.md +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/_resources.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/adapt/report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/scope.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/agent/tools.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/cli.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/encode.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/genome.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/env/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/env/policies.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/monitor/run.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/router.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rag/index.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rag/llm.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rag/qa.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rules/loader.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rules/schema.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/rules/solver.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/score/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/server/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/server/api.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/ui/app.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/verify/schema.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/verify/service.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/SOURCES.txt +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/paper1.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/paper2.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/paper3.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/paper4.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/phase0.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_a.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_b.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_ba.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_bench.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_c.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_cal.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_d.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_e.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_env.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_ep.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_f.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_g.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_h.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_mc.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_o.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_r.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_route.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_uq.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_v.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/prereg/ws_wv.yaml +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_build_durability.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_train_safety.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p1_validation_report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/ws_b_report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/scripts/ws_c_report.py +0 -0
- {pen_stack-4.0.0 → pen_stack-4.0.1}/setup.cfg +0 -0
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to PEN-STACK are documented here. This file follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/) and the program's phase structure.
|
|
5
5
|
|
|
6
|
+
## [4.0.1] - 2026-06-09 - data-correctness patch: writer-verification panel verified against Perry 2025
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- **WS-WV frozen panel is now verbatim from the measured Perry 2025 ISCro4 DMS.** The offline-fallback panel
|
|
10
|
+
in `atlas/writer_verify.py` previously used *illustrative* Z-scores (2.6/2.1/1.7) and invented control
|
|
11
|
+
variants (G15D/P88R/L120E), and `_CORE_RESIDUES` used illustrative arginines. Replaced with the REAL values
|
|
12
|
+
from `science.adz0276` Table S3: the top-3 enhancers **N322P (Z 0.754), H50K (0.742), R278M (0.709)**, real
|
|
13
|
+
near-neutral variants (V21R, S312Q, G286T), the most-deleterious variants (R132E −5.40, R137E −5.12,
|
|
14
|
+
R195D −4.98), and the documented catalytic residues **D11/E60/D102/D105/S241** ("Residue Groups" sheet). The
|
|
15
|
+
real-DMS path (on the VM/Drive) was already correct; only the offline fallback constants were illustrative.
|
|
16
|
+
Added `test_ws_wv.py::test_frozen_panel_matches_real_perry_dms_table_s3` to guard against drift.
|
|
17
|
+
|
|
6
18
|
## [4.0.0] - 2026-06-09 - v4.0 release: the Oracle Mesh (on top of the foundation models) + writer verification
|
|
7
19
|
|
|
8
20
|
A major bump: the substrate now *composes* the biomolecular foundation models under one contract and verifies
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.1
|
|
4
4
|
Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
|
|
5
5
|
Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -89,7 +89,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
|
|
|
89
89
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
90
90
|
[](LICENSE)
|
|
91
91
|
[](https://www.python.org/)
|
|
92
|
-
[](CHANGELOG.md)
|
|
93
93
|
[](tests/)
|
|
94
94
|
[](https://github.com/astral-sh/ruff)
|
|
95
95
|
[](docker/)
|
|
@@ -14,7 +14,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
|
|
|
14
14
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
15
15
|
[](LICENSE)
|
|
16
16
|
[](https://www.python.org/)
|
|
17
|
-
[](CHANGELOG.md)
|
|
18
18
|
[](tests/)
|
|
19
19
|
[](https://github.com/astral-sh/ruff)
|
|
20
20
|
[](docker/)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "4.0.
|
|
2
|
+
__version__ = "4.0.1"
|
|
@@ -21,16 +21,20 @@ from __future__ import annotations
|
|
|
21
21
|
import math
|
|
22
22
|
from dataclasses import dataclass
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
# (
|
|
24
|
+
# A FROZEN retrospective panel of REAL values from the Perry 2025 ISCro4 deep mutational scan
|
|
25
|
+
# (science.adz0276 Table S3, sheet "L2FC_Relative_Z-Scores", column Z_Score_wrt_WT) — the three top-ranked
|
|
26
|
+
# enhancers, three near-neutral variants, and the three most-deleterious variants, copied verbatim from the
|
|
27
|
+
# measured table. Used only when the full Perry DMS is absent (offline/CI); never fabricated.
|
|
26
28
|
_FROZEN_DMS_Z = {
|
|
27
|
-
"N322P":
|
|
28
|
-
"
|
|
29
|
-
"
|
|
29
|
+
"N322P": 0.754, "H50K": 0.742, "R278M": 0.709, # top-3 enhancers (measured Z, ranks 1-3)
|
|
30
|
+
"V21R": -0.000, "S312Q": -0.001, "G286T": -0.001, # near-neutral (|Z| ~ 0)
|
|
31
|
+
"R132E": -5.400, "R137E": -5.115, "R195D": -4.984, # most-deleterious (measured worst by Z)
|
|
30
32
|
}
|
|
31
33
|
KNOWN_ISCRO4_ENHANCERS = ["N322P", "H50K", "R278M"]
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
_WORSE_CONTROLS = ["R132E", "R137E", "R195D"] # measured-worst variants (Perry Table S3)
|
|
35
|
+
# the catalytic residues a plausible ISCro4-family candidate must retain (Perry Table S3, sheet
|
|
36
|
+
# "Residue Groups", Catalytic_Residues == "Catalytic"): D11, E60, D102, D105, S241 (1-based) -> 0-based below
|
|
37
|
+
_CORE_RESIDUES = {10: "D", 59: "E", 101: "D", 104: "D", 240: "S"}
|
|
34
38
|
|
|
35
39
|
|
|
36
40
|
def _sigmoid(x: float) -> float:
|
|
@@ -91,9 +95,8 @@ def blind_recovery(top_k: int = 5) -> dict:
|
|
|
91
95
|
ranked = sorted(scores, key=scores.get, reverse=True)
|
|
92
96
|
top = ranked[:top_k]
|
|
93
97
|
recovered = {e: (e in top) for e in KNOWN_ISCRO4_ENHANCERS}
|
|
94
|
-
worse = ["G15D", "P88R", "L120E"]
|
|
95
98
|
enh_min = min(scores[e] for e in KNOWN_ISCRO4_ENHANCERS)
|
|
96
|
-
worse_max = max(scores[w] for w in
|
|
99
|
+
worse_max = max(scores[w] for w in _WORSE_CONTROLS)
|
|
97
100
|
return {"available": True, "model": "frozen_retrospective_panel", "n": len(_FROZEN_DMS_Z), "top_k": top_k,
|
|
98
101
|
"top": top, "recovered": recovered, "all_enhancers_recovered": all(recovered.values()),
|
|
99
102
|
"enhancers_outrank_worse": bool(enh_min > worse_max),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.1
|
|
4
4
|
Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
|
|
5
5
|
Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -89,7 +89,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
|
|
|
89
89
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
90
90
|
[](LICENSE)
|
|
91
91
|
[](https://www.python.org/)
|
|
92
|
-
[](CHANGELOG.md)
|
|
93
93
|
[](tests/)
|
|
94
94
|
[](https://github.com/astral-sh/ruff)
|
|
95
95
|
[](docker/)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pen-stack"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.1"
|
|
8
8
|
description = "Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|