pen-stack 5.3.0__tar.gz → 5.4.0__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-5.3.0 → pen_stack-5.4.0}/CHANGELOG.md +30 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/CITATION.cff +1 -1
- {pen_stack-5.3.0 → pen_stack-5.4.0}/PKG-INFO +19 -2
- {pen_stack-5.3.0 → pen_stack-5.4.0}/README.md +18 -1
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/oracles/scope_cards.yaml +14 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/__init__.py +1 -1
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/cite.py +3 -0
- pen_stack-5.4.0/pen_stack/planner/innate_sensing.py +135 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/verify/service.py +21 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/PKG-INFO +19 -2
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/SOURCES.txt +3 -0
- pen_stack-5.4.0/prereg/SHA256_LOCK_ws_innate.json +8 -0
- pen_stack-5.4.0/prereg/ws_innate.yaml +39 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pyproject.toml +1 -1
- {pen_stack-5.3.0 → pen_stack-5.4.0}/LICENSE +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/MANIFEST.in +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/bench/run.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/atlas_families.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/cargo_polish.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/cell_types.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/datasets.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/delivery_rules.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/gates_v3.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/intent_weights.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/known_unknowns.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/llm.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/monitor_queries.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/rules/delivery.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/rules/fold.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/rules/payload.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/rules/reachability.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/score_axes.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/target_sites.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/write_types.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/BACKLOG.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/DEPLOY.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/INFRA.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/MCP.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/RELEASING.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/REPRO.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/agent.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/benchmark_circularity.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/cards/atlas.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/cards/durability.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/cards/safety.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/co_scientist.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/delivery.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/dissemination.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/environment.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/index.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/oracles.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/positioning.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/private_data_formats.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/quickstart.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/rules.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/scope.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/scorecard.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/uncertainty.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/verify.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/world_model.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/writer_verification.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/docs/wtkb.md +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/_resources.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/adapt/report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/co_scientist.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/scope.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/agent/tools.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/cli.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/encode.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/genome.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/env/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/env/policies.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/build.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/query.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/graph/schema.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/monitor/run.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/router.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rag/index.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rag/llm.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rag/qa.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rules/loader.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rules/schema.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/rules/solver.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/score/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/server/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/server/api.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/ui/app.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/verify/schema.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/paper1.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/paper2.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/paper3.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/paper4.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/phase0.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_a.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_b.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_ba.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_bench.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_c.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_cal.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_cite.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_crit.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_ct.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_d.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_e.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_env.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_ep.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_f.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_g.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_graph.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_h.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_immune.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_mc.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_mon.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_o.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_plan.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_r.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_route.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_uq.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_v.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/prereg/ws_wv.yaml +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_build_durability.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_train_safety.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p1_validation_report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/ws_b_report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/scripts/ws_c_report.py +0 -0
- {pen_stack-5.3.0 → pen_stack-5.4.0}/setup.cfg +0 -0
|
@@ -3,6 +3,36 @@
|
|
|
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
|
+
## [5.4.0] - 2026-06-10 - v5.4 release: Computed innate-sensing scorer (completes the computable immune axes)
|
|
7
|
+
|
|
8
|
+
The third computed delivery-immunology signal, after v5.2 genotoxicity and v5.3 capsid epitope load. Innate
|
|
9
|
+
sensing of a delivered nucleic acid is computed directly from the **cargo sequence** — CpG O/E for DNA (TLR9),
|
|
10
|
+
U-richness + dsRNA for mRNA (TLR7/RIG-I) — covering every cargo form. Workstream WS-INNATE, SHA-locked.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **WS-INNATE scorer** — `pen_stack/planner/innate_sensing.py`: `cpg_observed_expected()` (Gardiner-Garden &
|
|
14
|
+
Frommer) + `innate_sensing(seq, cargo_form)` → `OracleResult`. **DNA** → CpG O/E (vertebrate genome ~0.2
|
|
15
|
+
tolerated; non-depleted DNA → 1 TLR9-stimulatory), `innate_score = max(0, 1 − CpG_O/E)`. **mRNA** → uridine
|
|
16
|
+
fraction + ViennaRNA dsRNA pairing (graceful when ViennaRNA absent), flagged **partial/`extrapolating`**.
|
|
17
|
+
**RNP** → minimal/transient. Abstains on empty / unrecognised input (never fabricates). Pure sequence
|
|
18
|
+
computation — no external data, runs in CI.
|
|
19
|
+
- **Surfaced in `verify()`** — when a design supplies `cargo_seq`, the computed innate load is attached as a
|
|
20
|
+
`cargo_innate_sensing` scope flag (cargo form from the writer output form, else the vehicle's first
|
|
21
|
+
compatible form) and added to `delivery_profile.cargo_innate`. No confidence added; the realized in-vivo
|
|
22
|
+
innate response stays a known-unknown.
|
|
23
|
+
- Scope card `innate_sensing`; `prereg/ws_innate.yaml`. `cite.curated_dois()` ingests the innate provenance
|
|
24
|
+
DOIs (CpG-TLR9 10.1073/pnas.161293498, CpG-depleted AAV 10.1172/JCI68205, RNA modification
|
|
25
|
+
10.1016/j.immuni.2005.06.008, + Krieg 1995 / Hornung 2006).
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Version 5.3.0 -> 5.4.0 (minor — additive computed scorer).
|
|
29
|
+
|
|
30
|
+
### Honesty invariant (unchanged)
|
|
31
|
+
- Sequence-intrinsic motif-**load** signal. The realized **in-vivo innate response** magnitude in a patient is
|
|
32
|
+
**not** modelled (known-unknown); the mRNA score is **partial** because the dominant evasion lever —
|
|
33
|
+
**nucleoside modification** (m1-pseudouridine) — is a manufacturing choice not derivable from sequence; DNA
|
|
34
|
+
methylation state is likewise out of scope. No magnitude predicted.
|
|
35
|
+
|
|
6
36
|
## [5.3.0] - 2026-06-10 - v5.3 release: Computed capsid epitope-load oracle (covers all vectors)
|
|
7
37
|
|
|
8
38
|
v5.2 computed genotoxicity only meaningfully touches integrating vectors. v5.3 brings the **NetMHC-style
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.4.0
|
|
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
|
|
@@ -91,7 +91,7 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
91
91
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
92
92
|
[](LICENSE)
|
|
93
93
|
[](https://www.python.org/)
|
|
94
|
-
[](CHANGELOG.md)
|
|
95
95
|
[](tests/)
|
|
96
96
|
[](https://github.com/astral-sh/ruff)
|
|
97
97
|
[](docker/)
|
|
@@ -135,6 +135,23 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
|
|
|
135
135
|
Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
|
|
136
136
|
a pre-registered, honest baseline before release.
|
|
137
137
|
|
|
138
|
+
## What is new in v5.4 — Computed innate-sensing scorer (completes the computable immune axes)
|
|
139
|
+
|
|
140
|
+
The third computed delivery-immunology signal (after v5.2 genotoxicity and v5.3 capsid epitope load). Innate
|
|
141
|
+
sensing of a delivered nucleic acid is computed directly from the **cargo sequence**, covering every cargo
|
|
142
|
+
form. It is a sequence-intrinsic motif-*load* signal; the realized in-vivo innate response stays a
|
|
143
|
+
known-unknown, and the mRNA score is honestly *partial* (the dominant lever — nucleoside modification — isn't
|
|
144
|
+
derivable from sequence).
|
|
145
|
+
|
|
146
|
+
| Cargo form | Pathway | Computed from sequence | Score |
|
|
147
|
+
|---|---|---|---|
|
|
148
|
+
| **DNA** (AAV / HDAd / HSV / plasmid) | TLR9 / cGAS | CpG observed/expected ratio | `max(0, 1 − CpG_O/E)` — vertebrate genome ~0.2 tolerated, non-depleted DNA → 1 stimulatory |
|
|
149
|
+
| **mRNA** (LNP-mRNA / electroporation) | TLR7/8 + RIG-I/MDA5/PKR | U-fraction + ViennaRNA dsRNA pairing | partial / `extrapolating` (nucleoside modification out of scope) |
|
|
150
|
+
| **RNP** (eVLP / electroporation) | minimal (transient gRNA) | — | ~0.9 by mechanism |
|
|
151
|
+
|
|
152
|
+
`verify()` surfaces it as a `cargo_innate_sensing` flag whenever a `cargo_seq` is supplied. See
|
|
153
|
+
`pen_stack/planner/innate_sensing.py`, `prereg/ws_innate.yaml`, and the `innate_sensing` scope card.
|
|
154
|
+
|
|
138
155
|
## What is new in v5.3 — Computed capsid epitope-load oracle (covers all vectors)
|
|
139
156
|
|
|
140
157
|
v5.2 computed genotoxicity only touches integrating vectors. v5.3 brings the **NetMHC-style calculation** to the
|
|
@@ -16,7 +16,7 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
16
16
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
17
17
|
[](LICENSE)
|
|
18
18
|
[](https://www.python.org/)
|
|
19
|
-
[](CHANGELOG.md)
|
|
20
20
|
[](tests/)
|
|
21
21
|
[](https://github.com/astral-sh/ruff)
|
|
22
22
|
[](docker/)
|
|
@@ -60,6 +60,23 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
|
|
|
60
60
|
Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
|
|
61
61
|
a pre-registered, honest baseline before release.
|
|
62
62
|
|
|
63
|
+
## What is new in v5.4 — Computed innate-sensing scorer (completes the computable immune axes)
|
|
64
|
+
|
|
65
|
+
The third computed delivery-immunology signal (after v5.2 genotoxicity and v5.3 capsid epitope load). Innate
|
|
66
|
+
sensing of a delivered nucleic acid is computed directly from the **cargo sequence**, covering every cargo
|
|
67
|
+
form. It is a sequence-intrinsic motif-*load* signal; the realized in-vivo innate response stays a
|
|
68
|
+
known-unknown, and the mRNA score is honestly *partial* (the dominant lever — nucleoside modification — isn't
|
|
69
|
+
derivable from sequence).
|
|
70
|
+
|
|
71
|
+
| Cargo form | Pathway | Computed from sequence | Score |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| **DNA** (AAV / HDAd / HSV / plasmid) | TLR9 / cGAS | CpG observed/expected ratio | `max(0, 1 − CpG_O/E)` — vertebrate genome ~0.2 tolerated, non-depleted DNA → 1 stimulatory |
|
|
74
|
+
| **mRNA** (LNP-mRNA / electroporation) | TLR7/8 + RIG-I/MDA5/PKR | U-fraction + ViennaRNA dsRNA pairing | partial / `extrapolating` (nucleoside modification out of scope) |
|
|
75
|
+
| **RNP** (eVLP / electroporation) | minimal (transient gRNA) | — | ~0.9 by mechanism |
|
|
76
|
+
|
|
77
|
+
`verify()` surfaces it as a `cargo_innate_sensing` flag whenever a `cargo_seq` is supplied. See
|
|
78
|
+
`pen_stack/planner/innate_sensing.py`, `prereg/ws_innate.yaml`, and the `innate_sensing` scope card.
|
|
79
|
+
|
|
63
80
|
## What is new in v5.3 — Computed capsid epitope-load oracle (covers all vectors)
|
|
64
81
|
|
|
65
82
|
v5.2 computed genotoxicity only touches integrating vectors. v5.3 brings the **NetMHC-style calculation** to the
|
|
@@ -138,3 +138,17 @@ oracles:
|
|
|
138
138
|
a viral vehicle whose antigen sequence is not committed (abstains)"
|
|
139
139
|
generalizes_to_unseen_loci: false
|
|
140
140
|
license: "open (this work; MHCflurry 10.1016/j.cels.2020.06.010, HLA-I supertypes 10.1186/1471-2172-9-1)"
|
|
141
|
+
|
|
142
|
+
innate_sensing: # v5.4 WS-INNATE: computed nucleic-acid innate-sensing motif load
|
|
143
|
+
family: genome
|
|
144
|
+
version: "cpg-oe+dsrna-2026"
|
|
145
|
+
output_kind: baseline # deterministic sequence statistic, not generative
|
|
146
|
+
valid_for: "sequence-intrinsic innate-sensing LOAD of a cargo sequence: CpG observed/expected (DNA ->
|
|
147
|
+
TLR9/cGAS; CpG-depleted DNA is tolerated, non-depleted is stimulatory) and U-richness + dsRNA pairing
|
|
148
|
+
(mRNA -> TLR7/8 + RIG-I/MDA5/PKR); a relative, computable proxy"
|
|
149
|
+
not_valid_for: "the realized IN-VIVO innate RESPONSE magnitude in a patient (a known-unknown); RNA
|
|
150
|
+
NUCLEOSIDE MODIFICATION (m1-pseudouridine), the dominant mRNA evasion lever - NOT sequence-derivable
|
|
151
|
+
(the mRNA score is PARTIAL / extrapolating); DNA methylation state of the delivered cargo"
|
|
152
|
+
generalizes_to_unseen_loci: false
|
|
153
|
+
license: "open (this work; CpG-TLR9 10.1073/pnas.161293498, CpG-depleted AAV 10.1172/JCI68205,
|
|
154
|
+
RNA modification 10.1016/j.immuni.2005.06.008)"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "5.
|
|
2
|
+
__version__ = "5.4.0"
|
|
@@ -36,6 +36,9 @@ def curated_dois() -> frozenset[str]:
|
|
|
36
36
|
dois.update(a.get("provenance_dois", []) or [])
|
|
37
37
|
except FileNotFoundError:
|
|
38
38
|
pass
|
|
39
|
+
# v5.4 computed innate-sensing provenance (CpG-TLR9 / AAV CpG-depletion / RNA modification)
|
|
40
|
+
from pen_stack.planner.innate_sensing import PROVENANCE_DOIS as _innate_dois
|
|
41
|
+
dois.update(_innate_dois)
|
|
39
42
|
gsh = yaml.safe_load(resource("configs/gsh_validated_heldout.yaml").read_text(encoding="utf-8"))["gsh"]
|
|
40
43
|
for g in gsh:
|
|
41
44
|
if g.get("doi"):
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Computed innate-immune-sensing scorer for nucleic-acid cargo (v5.4, WS-INNATE).
|
|
2
|
+
|
|
3
|
+
Innate sensing of a delivered nucleic acid is a property of the CARGO SEQUENCE (and its form), computed here
|
|
4
|
+
directly from sequence - the third computed delivery-immunology signal (after v5.2 genotoxicity and v5.3 capsid
|
|
5
|
+
epitope load). It covers every cargo form the palette carries:
|
|
6
|
+
|
|
7
|
+
* DNA (AAV / HDAd / HSV / electroporated plasmid) -> TLR9 / cGAS sensing of unmethylated CpG. The standard
|
|
8
|
+
sequence statistic is the CpG observed/expected ratio (Gardiner-Garden & Frommer): vertebrate genomes are
|
|
9
|
+
CpG-DEPLETED (O/E ~ 0.2) and tolerated, while non-depleted plasmid/viral DNA (O/E -> 1) is TLR9-stimulatory;
|
|
10
|
+
CpG-DEPLETED vectors evade detection. innate_score = max(0, 1 - CpG_O/E).
|
|
11
|
+
* mRNA (LNP-mRNA / electroporated mRNA) -> TLR7/8 (U-rich ssRNA) + RIG-I / MDA5 / PKR (dsRNA). Computed from
|
|
12
|
+
uridine fraction + ViennaRNA base-pairing. This signal is PARTIAL and flagged `extrapolating`: the dominant
|
|
13
|
+
innate-evasion lever for mRNA is NUCLEOSIDE MODIFICATION (m1-pseudouridine), which is NOT derivable from the
|
|
14
|
+
nucleotide sequence (a manufacturing choice) - a stated known-limitation.
|
|
15
|
+
* RNP / protein -> minimal, transient nucleic-acid exposure (no DNA; short-lived gRNA): score ~ high.
|
|
16
|
+
|
|
17
|
+
Answers through the v4.0 OracleResult contract (output_kind="baseline"). HONESTY: this is a sequence-intrinsic
|
|
18
|
+
motif-LOAD signal; the realized in-vivo innate RESPONSE magnitude in a patient is NOT modelled and stays a
|
|
19
|
+
known-unknown; DNA methylation state and RNA nucleoside modification are out of sequence scope.
|
|
20
|
+
"""
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from pen_stack.oracles.schema import OracleResult, Provenance
|
|
24
|
+
|
|
25
|
+
_SCOPE_CARD = "innate_sensing"
|
|
26
|
+
_DNA = set("ACGT")
|
|
27
|
+
_RNA = set("ACGU")
|
|
28
|
+
# CpG-TLR9 (Krieg 1995 / Bauer 2001), CpG-depleted AAV evasion (Faust 2013), RNA nucleoside modification
|
|
29
|
+
# (Kariko 2005), 5'ppp dsRNA RIG-I (Hornung 2006).
|
|
30
|
+
PROVENANCE_DOIS = ["10.1038/374546a0", "10.1073/pnas.161293498", "10.1172/JCI68205",
|
|
31
|
+
"10.1016/j.immuni.2005.06.008", "10.1126/science.1132505"]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _clean(seq: str) -> str:
|
|
35
|
+
return "".join(c for c in (seq or "").upper() if c.isalpha())
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def cpg_observed_expected(dna: str) -> dict:
|
|
39
|
+
"""CpG observed/expected ratio (Gardiner-Garden & Frommer): (n_CpG / (n_C * n_G)) * length. Vertebrate
|
|
40
|
+
genome ~0.2 (depleted); non-depleted plasmid/viral DNA approaches 1; engineered CpG-free -> 0."""
|
|
41
|
+
s = _clean(dna).replace("U", "T")
|
|
42
|
+
L = len(s)
|
|
43
|
+
nC, nG = s.count("C"), s.count("G")
|
|
44
|
+
n_cpg = s.count("CG")
|
|
45
|
+
oe = (n_cpg / (nC * nG) * L) if (nC and nG) else 0.0
|
|
46
|
+
gc = (nC + nG) / L if L else 0.0
|
|
47
|
+
return {"length": L, "cpg_count": n_cpg, "cpg_oe": round(oe, 4), "gc": round(gc, 4)}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _dsrna_paired_fraction(rna: str) -> float | None:
|
|
51
|
+
"""Fraction of bases paired in the ViennaRNA MFE structure (dsRNA -> RIG-I/MDA5/PKR). None if ViennaRNA
|
|
52
|
+
absent (graceful degradation, as in bridge/fold_qc.py)."""
|
|
53
|
+
try:
|
|
54
|
+
import RNA
|
|
55
|
+
except Exception: # noqa: BLE001
|
|
56
|
+
return None
|
|
57
|
+
s = _clean(rna).replace("T", "U")
|
|
58
|
+
if not s:
|
|
59
|
+
return None
|
|
60
|
+
struct, _ = RNA.fold_compound(s).mfe()
|
|
61
|
+
paired = sum(1 for c in struct if c in "()")
|
|
62
|
+
return round(paired / len(struct), 4) if struct else None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _prov() -> Provenance:
|
|
66
|
+
return Provenance(model="cargo_innate_sensing", version="1.0", source="adapter",
|
|
67
|
+
extra={"provenance_dois": PROVENANCE_DOIS})
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def innate_sensing(seq: str, cargo_form: str) -> OracleResult:
|
|
71
|
+
"""Computed innate-sensing score for a cargo sequence + form, as an OracleResult (v4.0 contract).
|
|
72
|
+
|
|
73
|
+
`cargo_form` in {DNA, mRNA, RNP}. Returns innate_score in [0,1] (1 = least innate-stimulatory). Abstains
|
|
74
|
+
(available=False) on an empty sequence or an unrecognised/uncomputable form. Never fabricates."""
|
|
75
|
+
s = _clean(seq)
|
|
76
|
+
form = (cargo_form or "").strip()
|
|
77
|
+
if not s:
|
|
78
|
+
return OracleResult(oracle="genome", value=None, provenance=_prov(), scope_card=_SCOPE_CARD,
|
|
79
|
+
in_scope=False, available=False, output_kind="baseline",
|
|
80
|
+
note="no cargo sequence supplied")
|
|
81
|
+
|
|
82
|
+
if form == "DNA":
|
|
83
|
+
c = cpg_observed_expected(s)
|
|
84
|
+
score = max(0.0, min(1.0, 1.0 - c["cpg_oe"]))
|
|
85
|
+
return OracleResult(
|
|
86
|
+
oracle="genome",
|
|
87
|
+
value={"innate_score": round(score, 3), "pathway": "TLR9/cGAS (unmethylated CpG)",
|
|
88
|
+
"cpg_oe": c["cpg_oe"], "cpg_count": c["cpg_count"], "gc": c["gc"], "length": c["length"]},
|
|
89
|
+
provenance=_prov(), native_uncertainty=None, scope_card=_SCOPE_CARD, in_scope=True,
|
|
90
|
+
extrapolating=False, output_kind="baseline", available=True,
|
|
91
|
+
note=(f"CpG O/E={c['cpg_oe']} ({c['cpg_count']} CpG, {c['length']} bp); innate_score=max(0,1-O/E). "
|
|
92
|
+
"Vertebrate genome O/E~0.2 (tolerated), non-depleted DNA ->1 (TLR9-stimulatory). DNA "
|
|
93
|
+
"methylation state and the realized in-vivo innate RESPONSE are known-unknowns (not modelled)."))
|
|
94
|
+
|
|
95
|
+
if form == "mRNA":
|
|
96
|
+
u_frac = s.replace("T", "U").count("U") / len(s)
|
|
97
|
+
paired = _dsrna_paired_fraction(s)
|
|
98
|
+
# partial sequence-only signal: U-richness (TLR7/8) + dsRNA pairing (RIG-I/PKR). The dominant evasion
|
|
99
|
+
# lever (nucleoside modification, m1-pseudouridine) is NOT sequence-derivable -> flagged extrapolating.
|
|
100
|
+
if paired is None:
|
|
101
|
+
score = max(0.0, min(1.0, 1.0 - u_frac))
|
|
102
|
+
note_ds = "ViennaRNA absent: dsRNA term omitted; score from U-fraction only."
|
|
103
|
+
else:
|
|
104
|
+
score = max(0.0, min(1.0, 1.0 - 0.5 * u_frac - 0.5 * paired))
|
|
105
|
+
note_ds = f"dsRNA paired_fraction={paired} (RIG-I/MDA5/PKR)."
|
|
106
|
+
return OracleResult(
|
|
107
|
+
oracle="rna",
|
|
108
|
+
value={"innate_score": round(score, 3), "pathway": "TLR7/8 (U-rich ssRNA) + RIG-I/MDA5/PKR (dsRNA)",
|
|
109
|
+
"u_fraction": round(u_frac, 4), "dsrna_paired_fraction": paired, "length": len(s)},
|
|
110
|
+
provenance=_prov(), native_uncertainty=None, scope_card=_SCOPE_CARD, in_scope=True,
|
|
111
|
+
extrapolating=True, output_kind="baseline", available=True,
|
|
112
|
+
note=("PARTIAL sequence-only signal. " + note_ds + " The dominant mRNA innate-evasion lever - "
|
|
113
|
+
"NUCLEOSIDE MODIFICATION (m1-pseudouridine) - is NOT sequence-derivable and is out of scope; "
|
|
114
|
+
"the realized in-vivo innate response is a known-unknown."))
|
|
115
|
+
|
|
116
|
+
if form == "RNP":
|
|
117
|
+
return OracleResult(
|
|
118
|
+
oracle="rna",
|
|
119
|
+
value={"innate_score": 0.9, "pathway": "minimal (transient gRNA; no DNA)", "length": len(s)},
|
|
120
|
+
provenance=_prov(), native_uncertainty=None, scope_card=_SCOPE_CARD, in_scope=True,
|
|
121
|
+
extrapolating=True, output_kind="baseline", available=True,
|
|
122
|
+
note=("RNP cargo: transient, no DNA -> minimal nucleic-acid innate sensing (synthetic gRNA may "
|
|
123
|
+
"trigger RIG-I via 5'-triphosphate; modification mitigates - not sequence-derivable). "
|
|
124
|
+
"Realized response is a known-unknown."))
|
|
125
|
+
|
|
126
|
+
return OracleResult(oracle="genome", value=None, provenance=_prov(), scope_card=_SCOPE_CARD,
|
|
127
|
+
in_scope=False, available=False, output_kind="baseline",
|
|
128
|
+
note=f"unrecognised cargo_form {cargo_form!r} (expected DNA / mRNA / RNP)")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def computed_innate_score(seq: str, cargo_form: str) -> tuple[float | None, OracleResult]:
|
|
132
|
+
"""Convenience: (innate_score or None, full OracleResult). None when the scorer abstains. Never fabricates."""
|
|
133
|
+
r = innate_sensing(seq, cargo_form)
|
|
134
|
+
val = (r.value or {}).get("innate_score") if (r.available and r.value) else None
|
|
135
|
+
return val, r
|
|
@@ -107,6 +107,27 @@ def verify(design: Design | dict, question: str | None = None) -> Verdict:
|
|
|
107
107
|
"reason": "documented ordinal immune/safety priors surfaced; the in-vivo immune "
|
|
108
108
|
"MAGNITUDE remains a known-unknown (not predicted)"})
|
|
109
109
|
|
|
110
|
+
# v5.4 WS-INNATE: if a cargo SEQUENCE is supplied, compute its innate-sensing load from sequence
|
|
111
|
+
# (CpG/TLR9 for DNA, U/dsRNA for mRNA). Surfaced as a scope flag; the realized innate RESPONSE magnitude
|
|
112
|
+
# is a known-unknown. Cargo form = the writer output form, else the vehicle's first compatible form.
|
|
113
|
+
if design.cargo_seq:
|
|
114
|
+
form = design.writer_output_form
|
|
115
|
+
if not form and design.delivery_vehicle:
|
|
116
|
+
from pen_stack.planner.delivery_vehicles import vehicle as _veh
|
|
117
|
+
forms = (_veh(design.delivery_vehicle) or {}).get("compatible_cargo_form") or []
|
|
118
|
+
form = forms[0] if forms else None
|
|
119
|
+
if form:
|
|
120
|
+
from pen_stack.planner.innate_sensing import innate_sensing
|
|
121
|
+
inr = innate_sensing(design.cargo_seq, form)
|
|
122
|
+
if inr.available:
|
|
123
|
+
scope_flags.append({"kind": "cargo_innate_sensing", "cargo_form": form,
|
|
124
|
+
"innate_score": inr.value["innate_score"], "pathway": inr.value["pathway"],
|
|
125
|
+
"reason": "computed sequence-intrinsic innate-sensing load; the realized "
|
|
126
|
+
"in-vivo innate RESPONSE magnitude is a known-unknown"})
|
|
127
|
+
if delivery_profile is not None:
|
|
128
|
+
delivery_profile = dict(delivery_profile)
|
|
129
|
+
delivery_profile["cargo_innate"] = inr.value
|
|
130
|
+
|
|
110
131
|
return Verdict(
|
|
111
132
|
legal=routed["legal"], deferred=False, write_type=design.write_type, routing=routing,
|
|
112
133
|
rule_results=results,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.4.0
|
|
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
|
|
@@ -91,7 +91,7 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
91
91
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
92
92
|
[](LICENSE)
|
|
93
93
|
[](https://www.python.org/)
|
|
94
|
-
[](CHANGELOG.md)
|
|
95
95
|
[](tests/)
|
|
96
96
|
[](https://github.com/astral-sh/ruff)
|
|
97
97
|
[](docker/)
|
|
@@ -135,6 +135,23 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
|
|
|
135
135
|
Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
|
|
136
136
|
a pre-registered, honest baseline before release.
|
|
137
137
|
|
|
138
|
+
## What is new in v5.4 — Computed innate-sensing scorer (completes the computable immune axes)
|
|
139
|
+
|
|
140
|
+
The third computed delivery-immunology signal (after v5.2 genotoxicity and v5.3 capsid epitope load). Innate
|
|
141
|
+
sensing of a delivered nucleic acid is computed directly from the **cargo sequence**, covering every cargo
|
|
142
|
+
form. It is a sequence-intrinsic motif-*load* signal; the realized in-vivo innate response stays a
|
|
143
|
+
known-unknown, and the mRNA score is honestly *partial* (the dominant lever — nucleoside modification — isn't
|
|
144
|
+
derivable from sequence).
|
|
145
|
+
|
|
146
|
+
| Cargo form | Pathway | Computed from sequence | Score |
|
|
147
|
+
|---|---|---|---|
|
|
148
|
+
| **DNA** (AAV / HDAd / HSV / plasmid) | TLR9 / cGAS | CpG observed/expected ratio | `max(0, 1 − CpG_O/E)` — vertebrate genome ~0.2 tolerated, non-depleted DNA → 1 stimulatory |
|
|
149
|
+
| **mRNA** (LNP-mRNA / electroporation) | TLR7/8 + RIG-I/MDA5/PKR | U-fraction + ViennaRNA dsRNA pairing | partial / `extrapolating` (nucleoside modification out of scope) |
|
|
150
|
+
| **RNP** (eVLP / electroporation) | minimal (transient gRNA) | — | ~0.9 by mechanism |
|
|
151
|
+
|
|
152
|
+
`verify()` surfaces it as a `cargo_innate_sensing` flag whenever a `cargo_seq` is supplied. See
|
|
153
|
+
`pen_stack/planner/innate_sensing.py`, `prereg/ws_innate.yaml`, and the `innate_sensing` scope card.
|
|
154
|
+
|
|
138
155
|
## What is new in v5.3 — Computed capsid epitope-load oracle (covers all vectors)
|
|
139
156
|
|
|
140
157
|
v5.2 computed genotoxicity only touches integrating vectors. v5.3 brings the **NetMHC-style calculation** to the
|
|
@@ -160,6 +160,7 @@ pen_stack/planner/delivery_constraints.py
|
|
|
160
160
|
pen_stack/planner/delivery_immunology.py
|
|
161
161
|
pen_stack/planner/delivery_vehicles.py
|
|
162
162
|
pen_stack/planner/genotoxicity_oracle.py
|
|
163
|
+
pen_stack/planner/innate_sensing.py
|
|
163
164
|
pen_stack/planner/multiplex.py
|
|
164
165
|
pen_stack/planner/optimize.py
|
|
165
166
|
pen_stack/planner/pipeline.py
|
|
@@ -253,6 +254,7 @@ prereg/SHA256_LOCK_ws_genotox.json
|
|
|
253
254
|
prereg/SHA256_LOCK_ws_graph.json
|
|
254
255
|
prereg/SHA256_LOCK_ws_h.json
|
|
255
256
|
prereg/SHA256_LOCK_ws_immune.json
|
|
257
|
+
prereg/SHA256_LOCK_ws_innate.json
|
|
256
258
|
prereg/SHA256_LOCK_ws_mc.json
|
|
257
259
|
prereg/SHA256_LOCK_ws_mon.json
|
|
258
260
|
prereg/SHA256_LOCK_ws_o.json
|
|
@@ -290,6 +292,7 @@ prereg/ws_genotox.yaml
|
|
|
290
292
|
prereg/ws_graph.yaml
|
|
291
293
|
prereg/ws_h.yaml
|
|
292
294
|
prereg/ws_immune.yaml
|
|
295
|
+
prereg/ws_innate.yaml
|
|
293
296
|
prereg/ws_mc.yaml
|
|
294
297
|
prereg/ws_mon.yaml
|
|
295
298
|
prereg/ws_o.yaml
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# PEN-STACK v5.4 - WS-INNATE (computed nucleic-acid innate-sensing scorer). Directional.
|
|
2
|
+
cycle: "v5.4"
|
|
3
|
+
workstream: "WS-INNATE"
|
|
4
|
+
prepared: "2026-06-10"
|
|
5
|
+
|
|
6
|
+
motivation: >
|
|
7
|
+
Third computed delivery-immunology signal (after v5.2 genotoxicity, v5.3 capsid epitope load), completing the
|
|
8
|
+
computable immune axes. Innate sensing of a delivered nucleic acid is a property of the CARGO SEQUENCE + form,
|
|
9
|
+
computable directly from sequence - covering every cargo form the palette carries.
|
|
10
|
+
|
|
11
|
+
deliverable: >
|
|
12
|
+
pen_stack/planner/innate_sensing.py: cpg_observed_expected() + innate_sensing(seq, cargo_form) -> OracleResult;
|
|
13
|
+
surfaced in verify() when a design supplies cargo_seq; scope card `innate_sensing`.
|
|
14
|
+
|
|
15
|
+
method: >
|
|
16
|
+
DNA (TLR9/cGAS): CpG observed/expected ratio (Gardiner-Garden & Frommer) = (n_CpG/(nC*nG))*L. Vertebrate
|
|
17
|
+
genome ~0.2 (CpG-depleted, tolerated); non-depleted plasmid/viral DNA -> 1 (stimulatory); CpG-depleted
|
|
18
|
+
vectors evade TLR9. innate_score = max(0, 1 - CpG_O/E). mRNA (TLR7/8 + RIG-I/MDA5/PKR): uridine fraction +
|
|
19
|
+
ViennaRNA dsRNA base-pairing; innate_score = 1 - 0.5*U_frac - 0.5*paired_frac (U-only if ViennaRNA absent).
|
|
20
|
+
RNP: minimal/transient (score ~0.9). v4.0 OracleResult (output_kind="baseline"). Refs: CpG-TLR9 Krieg 1995
|
|
21
|
+
[10.1038/374546a0] / Bauer 2001 [10.1073/pnas.161293498]; CpG-depleted AAV Faust 2013 [10.1172/JCI68205];
|
|
22
|
+
RNA nucleoside modification Kariko 2005 [10.1016/j.immuni.2005.06.008]; 5'ppp dsRNA RIG-I Hornung 2006
|
|
23
|
+
[10.1126/science.1132505].
|
|
24
|
+
|
|
25
|
+
acceptance: >
|
|
26
|
+
(1) CpG O/E computed correctly (CGCGCG -> 2.0) and mapped to a TLR9 score (CpG-free DNA -> 1.0, CpG-rich ->
|
|
27
|
+
0.0). (2) DNA / mRNA / RNP forms handled; mRNA flagged PARTIAL (extrapolating) with the nucleoside-
|
|
28
|
+
modification limitation declared. (3) the scorer ABSTAINS on empty / unrecognised input (never fabricates).
|
|
29
|
+
(4) verify() surfaces a cargo_innate_sensing scope flag when cargo_seq is supplied, none otherwise. (5)
|
|
30
|
+
provenance DOIs curated / Crossref-verified.
|
|
31
|
+
|
|
32
|
+
honesty_invariant: >
|
|
33
|
+
Sequence-intrinsic motif-LOAD signal. The realized IN-VIVO innate RESPONSE magnitude in a patient is NOT
|
|
34
|
+
modelled (known-unknown); the mRNA score is PARTIAL because the dominant evasion lever - nucleoside
|
|
35
|
+
modification (m1-pseudouridine) - is a manufacturing choice NOT derivable from sequence; DNA methylation state
|
|
36
|
+
is likewise out of scope. No magnitude predicted.
|
|
37
|
+
|
|
38
|
+
gate: "CpG O/E correct + TLR9 mapping; DNA/mRNA/RNP handled; mRNA flagged partial; abstains not fabricates; verify surfaces it; provenance curated; no-fabrication intact."
|
|
39
|
+
locked_files: [prereg/ws_innate.yaml]
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pen-stack"
|
|
7
|
-
version = "5.
|
|
7
|
+
version = "5.4.0"
|
|
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
|