pen-stack 7.1.6__tar.gz → 7.1.8__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-7.1.6 → pen_stack-7.1.8}/CHANGELOG.md +48 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/CITATION.cff +1 -1
- {pen_stack-7.1.6 → pen_stack-7.1.8}/PKG-INFO +1 -1
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/__init__.py +1 -1
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/immune_profile.py +83 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/server/api.py +16 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/PKG-INFO +1 -1
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pyproject.toml +1 -1
- {pen_stack-7.1.6 → pen_stack-7.1.8}/LICENSE +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/MANIFEST.in +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/bench/run.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_grounding/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_grounding/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_headtohead/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_routing/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_routing/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_safety/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/chat_safety/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/delivery/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_challenge/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/loop/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/offtarget/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/oracle/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/position_effect/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/position_effect/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/verify/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/writer_efficiency/README.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/writer_efficiency/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/benchmarks/writespec/SHA256SUMS +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/aav_serotype_tropism.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/antipeg.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/atlas_families.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/calibration/preexisting_nab_independent.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/cargo_polish.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/cell_types.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/datasets.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/delivery_rules.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/expression/modifiers.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/expression/promoters.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/gates_v3.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/intent_weights.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/known_unknowns.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/llm.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/metric_guide.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/mhc_epitope_oracle.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/monitor_queries.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/oracles/execution.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/oracles/reliability.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/compliance.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/delivery.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/fold.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/payload.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/rules/reachability.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/safety/hazard_registry.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/safety/policy.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/safety/probes.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/score_axes.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/seroprevalence.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/target_sites.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/write_types.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/writer_sequences.fasta +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/BACKLOG.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/DEPLOY.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/INFRA.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/MCP.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/RELEASING.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/REPRO.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/STABILITY.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/agent.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/autonomy.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/benchmark_circularity.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/biosecurity.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/build_interface.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/atlas.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/durability.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/offtarget_data.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/position_effect_data.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/safety.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/cards/writer_efficiency_data.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/challenge.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/closed_loop.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/co_scientist.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/co_scientist_loop.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/delivery.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/delivery_immunology.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/delivery_recommender.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/digital_twin.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/dissemination.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/environment.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/experiment_design.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/generative_design.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/immune_profiler.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/index.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/integrations.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/live_oracles.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/offtarget.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/oracle_mesh.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/oracles.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/position_effect.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/positioning.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/private_data_formats.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/quickstart.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/responsible_use.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/rule_spec.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/rules.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/scope.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/scorecard.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/tpe_bench.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/uncertainty.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/verify.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/verify_service.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/world_model.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/writer_efficiency.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/writer_verification.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/writespec_bench.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/writespec_profile.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/docs/wtkb.md +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/_resources.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/acquire.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/brains.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/campaign.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/design.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/active/validate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/adapt/report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/cite.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/co_scientist.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/orchestrator_live.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/scope.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/agent/tools.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/api/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/api/manifest.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/guide_design.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/writer_efficiency.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/writer_predict.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/writer_recommend.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/build/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/build/cloudlab.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/build/ingest.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/build/protocol.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/build/simlab.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/cli.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/encode.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/genome.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/capsid_generate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/generate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/pareto.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/space.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/design/writer_variants.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/env/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/env/policies.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/build.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/query.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/graph/schema.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/loop/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/loop/continual.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/loop/cycle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/loop/drift.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/monitor/run.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/affinity.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/reliability.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/status.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/structure_run.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/oracles/vcell.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/ada_risk.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/antipeg_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/chromosome.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery_immune.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery_predict.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/immune_mhc2.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/innate_sensing.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/router.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/seroprevalence_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/corpus.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/embed.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/ground.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/index.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/llm.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/qa.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rag/retrieve.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/loader.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/schema.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/solver.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/rules/spec.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/audit.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/gate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/policy.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/redteam.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/registry.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/screen.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/safety/standards.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/score/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/server/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/clarify.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/extract.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/cell.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/chem.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/feature.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/gene.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/locus.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/resolvers/phenotype.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/satisfy.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/service.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/spec/writespec.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/calibrate.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/data/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/data/position_effect.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/mechanistic.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/outcome.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/twin/position_effect.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/ui/app.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/closed_loop.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/experiment_design.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/expr_controls.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/generative_design.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/heldout_celltype_expr.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/immune_calibration.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/known_biology_expr.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/outcome_prediction.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/protocol_safety.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/safety_screening.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/verify/proof.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/verify/schema.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/verify/service.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/guide.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/llm.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/llm_provider.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/router.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/server.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/web/tools.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/offtarget_assay.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/offtarget_data.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/offtarget_predict.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/SOURCES.txt +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_acq.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_calib.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_chat.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_closedloop.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_continual.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_delivery.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_drift.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_expr2.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_frontend.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_gen.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_hybrid.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_immune2.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_innate.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_loop.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_manifest.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_mcp.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_mech.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_offtarget.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_openapi.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_oracle.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_orch.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_peg.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_penchat.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_policy.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_profile.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_proto.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_screen.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_verify.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_writer.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_writespec.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/paper1.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/paper2.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/paper3.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/paper4.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/phase0.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_a.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_acq.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_aldesign.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_alvalidate.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_b.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ba.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_bench.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_c.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_cal.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_calib.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_challenge.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_chat.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_cite.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_closedloop.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_continual.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_cosci2.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_crit.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ct.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_d.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_delivery.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_drift.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_e.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_env.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ep.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_expr2.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_f.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_frontend.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_g.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_gen.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_graph.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_h.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_hybrid.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_immune.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_immune2.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_ingest.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_innate.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_loop.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_manifest.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_mc.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_mcp.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_mech.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_mon.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_o.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_offtarget.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_openapi.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_oracle.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_orch.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_outcome.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_pareto.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_peg.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_penchat.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_plan.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_policy.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_profile.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_proto.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_r.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_redteam.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_route.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_screen.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_seroprev.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_simlab.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_twincal.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_uq.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_v.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_vcell.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_verify.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_writer.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_writespec.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/prereg/ws_wv.yaml +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/build_capsid_fitness.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/build_rag_corpus.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/calibrate_immune_axes.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/fetch_licensed_sources.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/offtarget_chromatin_incremental.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/offtarget_chromatin_matched.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/offtarget_chromatin_validation.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_build_durability.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_build_position_effect.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_build_writer_eff.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_train_safety.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p1_validation_report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/ws_b_report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/scripts/ws_c_report.py +0 -0
- {pen_stack-7.1.6 → pen_stack-7.1.8}/setup.cfg +0 -0
|
@@ -3,6 +3,54 @@
|
|
|
3
3
|
All notable changes to PEN-STACK are documented here. This file follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/).
|
|
5
5
|
|
|
6
|
+
## [7.1.8] - 2026-06-30 - Writer immunogenicity moves to the Writer Atlas; SpCas9 removed from the writer options
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- **The writer enzyme is no longer chosen in the Design Studio; its immunogenicity moves to the Writer Atlas, where
|
|
10
|
+
writers belong.** The Design Studio's writer dropdown existed only to feed the two writer-as-antigen immune axes
|
|
11
|
+
(MHC-II + ADA); that duplicated the dedicated Writer Atlas page. Now:
|
|
12
|
+
- The **Writer enzyme dropdown is removed** from `DesignForm` (and `DEFAULT_DESIGN`). The Design Studio's "Profile
|
|
13
|
+
immune & delivery" action correctly scopes to the **delivery/vehicle** axes (genotoxicity, CD8 capsid, innate,
|
|
14
|
+
pre-existing NAb, anti-PEG). `ImmuneProfileCard` hides the writer axes by default (`hideWriterAxes`).
|
|
15
|
+
- A new **Writer immunogenicity** card on the **Writer Atlas** surfaces each genome writer's MHC-II/CD4 epitope
|
|
16
|
+
load + ADA risk + human self-match, read from the **committed NetMHCIIpan-4.0 cache — not recomputed**
|
|
17
|
+
(`GET /api/writer/immune`, `immune_profile.writer_immunogenicity_table()`).
|
|
18
|
+
- **SpCas9 is removed** from the writer set: it is a nuclease/editor, not a large-cargo genome writer. The Writer
|
|
19
|
+
Atlas immunogenicity covers the actual writers — **Bxb1** (serine integrase) and **ISCro4** (bridge recombinase);
|
|
20
|
+
the Cas9 nuclease and the human self control are excluded. (The engine retains SpCas9 in its cache for other
|
|
21
|
+
uses; only the user-facing writer list drops it.)
|
|
22
|
+
- The engine still returns the `mhc2_writer` / `ada_writer` axes from `immune_profile()` for API/MCP callers that
|
|
23
|
+
pass a `writer_family` — only the web UI moved the writer profiling to the Writer Atlas. No data was recomputed.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- `test_ws_profile.py`: `test_writer_immunogenicity_table_for_the_writer_atlas` (covers Bxb1 + ISCro4 from the
|
|
27
|
+
cache; SpCas9 and the self control excluded; grounded MHC-II + ADA values).
|
|
28
|
+
|
|
29
|
+
## [7.1.7] - 2026-06-30 - Administration context (in-vivo / ex-vivo) now drives the immune profile
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- **The in-vivo / ex-vivo "Context" toggle had no effect on the immune profile.** It already drove the Generate
|
|
33
|
+
vehicle sweep (route-compatible vehicles) and the Verify germline-prohibition legality rule, but `immune_profile()`
|
|
34
|
+
ignored it, so the per-axis immune profile was identical for in-vivo and ex-vivo. It now applies a documented,
|
|
35
|
+
grounded administration modifier (`immune_profile._administration_modifier` / `_apply_administration`):
|
|
36
|
+
- **Pre-existing NAb is muted to "no barrier" (1.0) ex vivo.** Ex-vivo delivery (cells transduced in a dish and
|
|
37
|
+
washed before transplant) never exposes the vector to the patient's circulating antibodies, so pre-existing
|
|
38
|
+
anti-vector NAb does not gate eligibility — the eligibility fraction is 1.0 regardless of titer. The original
|
|
39
|
+
seroprevalence value is preserved (`pre_admin_value`) and the muting is explained in the axis note. This is the
|
|
40
|
+
same in-vivo/ex-vivo distinction the v5.1 `delivery_immunology` profile already encodes (`computed_ex_vivo_muted`).
|
|
41
|
+
- **CD8 capsid is flagged muted ex vivo** (systemic anti-capsid response minimal), but its intrinsic presentability
|
|
42
|
+
value is kept — transduced cells can still present capsid epitopes, a real residual concern, so no number is
|
|
43
|
+
fabricated.
|
|
44
|
+
- **Genotoxicity, innate, anti-PEG and the writer axes are unchanged** by administration context (insertional risk
|
|
45
|
+
and cargo/writer immunogenicity are intrinsic, not a function of circulating-antibody exposure).
|
|
46
|
+
- A `administration_modifier` block (parallel to the existing `route_modifier`) is added to the profile; the
|
|
47
|
+
`ImmuneProfileCard` shows an in-vivo/ex-vivo chip, a per-axis "ex-vivo muted" badge with the reason, and the
|
|
48
|
+
administration effect line. In-vivo and unspecified contexts leave every axis untouched (backward compatible).
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
- `test_ws_profile.py`: `test_administration_context_mutes_vector_facing_axes_ex_vivo` (ex-vivo mutes pre-existing
|
|
52
|
+
NAb to 1.0 and flags CD8; in-vivo/unspecified are unchanged; genotoxicity is never muted by administration).
|
|
53
|
+
|
|
6
54
|
## [7.1.6] - 2026-06-30 - Immune axes wired end-to-end + Delivery folded into Design Studio
|
|
7
55
|
|
|
8
56
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 7.1.
|
|
3
|
+
Version: 7.1.8
|
|
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
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "7.1.
|
|
2
|
+
__version__ = "7.1.8"
|
|
@@ -48,6 +48,65 @@ def _route_modifier(route: str | None) -> dict | None:
|
|
|
48
48
|
"note": "DOCUMENTED qualitative modifier on the realized response, NOT a quantified magnitude "
|
|
49
49
|
"(the magnitude stays a known-unknown)."}
|
|
50
50
|
|
|
51
|
+
|
|
52
|
+
# v7.1.7 WS-ADMIN, administration-context (in-vivo vs ex-vivo) modifier on the VECTOR-FACING immune axes.
|
|
53
|
+
# Ex-vivo delivery (cells transduced in a dish and washed before transplant) does NOT expose the vector to the
|
|
54
|
+
# patient's circulating antibodies, so the pre-existing anti-vector NAb axis - a humoral, bloodstream eligibility
|
|
55
|
+
# barrier - does not gate ex-vivo use (it is muted to "no barrier"). The systemic anti-capsid CD8 response is also
|
|
56
|
+
# muted ex vivo (the host barely sees the capsid), but transduced cells can still present capsid epitopes (a real,
|
|
57
|
+
# residual concern), so that axis is FLAGGED muted without overwriting its intrinsic value. This is the SAME
|
|
58
|
+
# in-vivo/ex-vivo distinction the v5.1 delivery_immunology profile already encodes ("computed_ex_vivo_muted").
|
|
59
|
+
# A DOCUMENTED, mechanistic modifier - never a fabricated magnitude; the realized response stays a known-unknown.
|
|
60
|
+
_EX_VIVO_MUTED_AXES = ("preexisting_nab", "cd8_epitope")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _is_ex_vivo(in_vivo) -> bool:
|
|
64
|
+
return str(in_vivo).strip().lower() in ("false", "0", "no", "ex_vivo", "ex vivo", "exvivo")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _administration_modifier(in_vivo) -> dict | None:
|
|
68
|
+
"""Documented administration-context modifier (in-vivo / ex-vivo) on the vector-facing axes, or None when the
|
|
69
|
+
design does not state an administration context. Qualitative, never a fabricated magnitude."""
|
|
70
|
+
if in_vivo is None:
|
|
71
|
+
return None
|
|
72
|
+
if _is_ex_vivo(in_vivo):
|
|
73
|
+
return {"context": "ex_vivo", "muted_axes": list(_EX_VIVO_MUTED_AXES),
|
|
74
|
+
"effect": "ex-vivo administration: the vector contacts cells in a dish and is washed before "
|
|
75
|
+
"transplant, so it is not exposed to the patient's circulating antibodies. Pre-existing "
|
|
76
|
+
"anti-vector NAb does not gate eligibility (humoral barrier bypassed); the systemic "
|
|
77
|
+
"anti-capsid CD8 response is muted, though transduced cells may still present capsid "
|
|
78
|
+
"epitopes (a residual, separate consideration).",
|
|
79
|
+
"note": "DOCUMENTED qualitative administration modifier (the same in-vivo/ex-vivo distinction as the "
|
|
80
|
+
"v5.1 delivery profile); the realized immune MAGNITUDE remains a known-unknown."}
|
|
81
|
+
return {"context": "in_vivo", "muted_axes": [],
|
|
82
|
+
"effect": "in-vivo (systemic / local) administration: the vector is exposed to the patient's "
|
|
83
|
+
"circulating antibodies and immune system, so the pre-existing NAb and anti-capsid CD8 "
|
|
84
|
+
"axes apply as reported.",
|
|
85
|
+
"note": "DOCUMENTED qualitative administration modifier; the realized magnitude is a known-unknown."}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _apply_administration(axes: dict, admin: dict | None) -> None:
|
|
89
|
+
"""Mutate the vector-facing axes in place for an ex-vivo administration context. Pre-existing NAb is muted to
|
|
90
|
+
'no barrier' (eligibility not gated when the vector never meets circulating antibody); CD8 capsid is flagged
|
|
91
|
+
muted but its intrinsic value is kept (transduced cells can still present). No-op for in-vivo / unspecified."""
|
|
92
|
+
if not admin or admin.get("context") != "ex_vivo":
|
|
93
|
+
return
|
|
94
|
+
na = axes.get("preexisting_nab")
|
|
95
|
+
if na and na.get("available") and na.get("value") is not None:
|
|
96
|
+
na["pre_admin_value"] = na["value"]
|
|
97
|
+
na["value"] = 1.0
|
|
98
|
+
na["uncertainty"] = 0.0
|
|
99
|
+
na["administration_muted"] = True
|
|
100
|
+
na["note"] = (f"ex-vivo administration: pre-existing circulating anti-vector antibodies do not reach the "
|
|
101
|
+
f"vector (transduction in a dish), so pre-existing NAb does not gate eligibility "
|
|
102
|
+
f"(muted from {na['pre_admin_value']} to 1.0 = no barrier). " + (na.get("note") or ""))
|
|
103
|
+
cd = axes.get("cd8_epitope")
|
|
104
|
+
if cd and cd.get("available") and cd.get("value") is not None:
|
|
105
|
+
cd["administration_muted"] = True
|
|
106
|
+
cd["note"] = ("ex-vivo administration: the systemic anti-capsid CD8 response is muted (minimal host capsid "
|
|
107
|
+
"exposure); transduced cells may still present capsid epitopes, so the intrinsic value is "
|
|
108
|
+
"kept. " + (cd.get("note") or ""))
|
|
109
|
+
|
|
51
110
|
# headline score key inside each oracle's value dict, per axis.
|
|
52
111
|
_SCORE_KEY = {"genotoxicity": "genotox_score", "cd8_epitope": "capsid_immune_score",
|
|
53
112
|
"innate": "innate_score", "preexisting_nab": "preexisting_score",
|
|
@@ -127,6 +186,24 @@ def _writer_antigen_card(design: dict) -> dict | None:
|
|
|
127
186
|
"Population-level proxy; realized CD4 response / ADA titer is a known-unknown."}
|
|
128
187
|
|
|
129
188
|
|
|
189
|
+
# Genome-WRITER families surfaced in the Writer Atlas immunogenicity view: the bundled writers that are actual
|
|
190
|
+
# genome writers (integrase / recombinase), each with a committed real NetMHCIIpan-4.0 MHC-II load + ADA-risk cache.
|
|
191
|
+
# The Cas9 nuclease (an editor, not a large-cargo writer) and the human self control are intentionally excluded.
|
|
192
|
+
_WRITER_IMMUNE_FAMILIES = ("serine_integrase", "bridge_IS110")
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def writer_immunogenicity_table() -> list[dict]:
|
|
196
|
+
"""Per-writer immunogenicity (MHC-II/CD4 epitope load + ADA risk) for the bundled genome-writer families, read
|
|
197
|
+
from the committed NetMHCIIpan-4.0 cache (no recomputation). Surfaced in the Writer Atlas as the writer's
|
|
198
|
+
antigen profile. Reuses the v6.9 writer-as-antigen card; excludes the Cas9 nuclease and the self control."""
|
|
199
|
+
out = []
|
|
200
|
+
for fam in _WRITER_IMMUNE_FAMILIES:
|
|
201
|
+
card = _writer_antigen_card({"writer_family": fam})
|
|
202
|
+
if card:
|
|
203
|
+
out.append({"writer_family": fam, **card})
|
|
204
|
+
return out
|
|
205
|
+
|
|
206
|
+
|
|
130
207
|
def immune_profile(design: dict) -> dict:
|
|
131
208
|
"""Per-design immune-risk profile across all axes. ``design`` keys: ``delivery_vehicle`` (or ``vehicle``),
|
|
132
209
|
``serotype``, ``cargo_seq``, ``writer_output_form`` (or ``cargo_form``), ``pegylated``.
|
|
@@ -162,6 +239,11 @@ def immune_profile(design: dict) -> dict:
|
|
|
162
239
|
"no bundled writer sequence -> abstains", "ada_writer"),
|
|
163
240
|
}
|
|
164
241
|
|
|
242
|
+
# v7.1.7 administration context: ex-vivo delivery bypasses the patient's circulating antibodies, so the
|
|
243
|
+
# vector-facing axes (pre-existing NAb, capsid CD8) are muted - documented, not a fabricated magnitude.
|
|
244
|
+
admin = _administration_modifier(design.get("in_vivo"))
|
|
245
|
+
_apply_administration(axes, admin)
|
|
246
|
+
|
|
165
247
|
# writer-as-antigen comparison: for non-viral delivery (no foreign capsid) or a foreign writer outscoring the
|
|
166
248
|
# capsid, the WRITER is the dominant antigen, the v6.9 insight, never collapsed into the other axes.
|
|
167
249
|
dominant = None
|
|
@@ -180,6 +262,7 @@ def immune_profile(design: dict) -> dict:
|
|
|
180
262
|
"writer_as_antigen": ({**writer_card, "dominant_antigen": dominant,
|
|
181
263
|
"writer_dominant_risk": writer_dominant_risk} if writer_card else None),
|
|
182
264
|
"route_modifier": _route_modifier(design.get("route")), # v5.6 WS-EXT documented route modifier (or None)
|
|
265
|
+
"administration_modifier": admin, # v7.1.7 in-vivo / ex-vivo documented modifier on the vector-facing axes
|
|
183
266
|
"known_unknowns": KNOWN_UNKNOWNS,
|
|
184
267
|
"no_fabrication": True,
|
|
185
268
|
"note": ("relative immune-risk SCREEN across axes (now incl. CD4/MHC-II + ADA over the writer enzyme); each "
|
|
@@ -244,6 +244,22 @@ def writer_variants_endpoint(integrase: str | None = None, system: str | None =
|
|
|
244
244
|
"(reported as a known limitation, never a manufactured positive)."}
|
|
245
245
|
|
|
246
246
|
|
|
247
|
+
@app.get("/writer/immune", tags=["writer atlas"])
|
|
248
|
+
def writer_immune_endpoint():
|
|
249
|
+
"""The writer enzyme's immunogenicity as an antigen (v6.9 writer-as-antigen, surfaced in the Writer Atlas from
|
|
250
|
+
v7.1.8): per genome-writer family, the real NetMHCIIpan-4.0 MHC-II/CD4 epitope load + the ADA-risk axis
|
|
251
|
+
(MHC-II density x foreignness, self-tolerance filtered against the human proteome). Read from the committed
|
|
252
|
+
cache - NOT recomputed. Population-level proxy, never a patient-specific magnitude (a known-unknown). The Cas9
|
|
253
|
+
nuclease (an editor, not a large-cargo writer) and the human self control are excluded."""
|
|
254
|
+
from pen_stack.planner.immune_profile import writer_immunogenicity_table
|
|
255
|
+
return {"writers": writer_immunogenicity_table(),
|
|
256
|
+
"method": "NetMHCIIpan-4.0 MHC-II epitope load + ADA risk (MHC-II density x foreignness, self-tolerance "
|
|
257
|
+
"filtered against the human proteome). Population-level proxy from the committed cache; the "
|
|
258
|
+
"realized CD4 response / ADA titer is a known-unknown.",
|
|
259
|
+
"scale": "0-1, higher = lower risk (1 = least presentable / least ADA-driving)",
|
|
260
|
+
"no_fabrication": True}
|
|
261
|
+
|
|
262
|
+
|
|
247
263
|
@app.get("/bridge/design")
|
|
248
264
|
def bridge_design(target: str, donor: str, scaffold: str = "ISCro4_enhanced",
|
|
249
265
|
ct: str | None = None, scan: bool = False):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 7.1.
|
|
3
|
+
Version: 7.1.8
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pen-stack"
|
|
7
|
-
version = "7.1.
|
|
7
|
+
version = "7.1.8"
|
|
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
|