factorforge-cds 3.5.3__tar.gz → 3.5.4__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.
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/PKG-INFO +15 -7
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/README.md +14 -6
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/pyproject.toml +9 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/analysis/metrics.py +1 -3
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/analysis/sequence_risks.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/benchmark/runner.py +1 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/cli/main.py +0 -65
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/host_model.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/reranker.py +2 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/slate_engine.py +0 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/slate_generator.py +0 -1
- factorforge_cds-3.5.4/src/factorforge/database.py +450 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/db/connector.py +3 -4
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/targeted_remediator.py +3 -3
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/evaluation/evaluator.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/evaluation/metrics.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/profiles/profile_snapshot.py +1 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/method_registry.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/version_manifest.json +3 -3
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/review/evaluation_integrity.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/schemas/evidence.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/scoring/quantization.py +1 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation/hub.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/PKG-INFO +15 -7
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/SOURCES.txt +3 -2
- factorforge_cds-3.5.4/src/factorforge_cds.egg-info/top_level.txt +1 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_harness.py +0 -3
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_scoring.py +0 -2
- factorforge_cds-3.5.4/tests/test_database.py +121 -0
- factorforge_cds-3.5.4/tests/test_database_configuration.py +119 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_dp_v2_1_initiation.py +3 -3
- factorforge_cds-3.5.4/tests/test_learning_workflow_boundary.py +11 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_multi_engine_governance.py +3 -3
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_no_raw_sequence_logging.py +0 -1
- factorforge_cds-3.5.4/tests/test_public_surface_scanner.py +37 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_quantized_scoring.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_rule_registry.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_sllm_biological_pipeline.py +8 -2
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_slm_interface.py +0 -1
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_suite_capability_compat.py +13 -4
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_version_manifest.py +2 -2
- factorforge_cds-3.5.3/src/factorforge/database.py +0 -147
- factorforge_cds-3.5.3/src/factorforge_cds.egg-info/top_level.txt +0 -3
- factorforge_cds-3.5.3/src/scratch/integrity_test.py +0 -100
- factorforge_cds-3.5.3/src/scripts/seed_fixtures.py +0 -107
- factorforge_cds-3.5.3/tests/test_database.py +0 -47
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/LICENSE +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/setup.cfg +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/__main__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/analysis/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/analysis/feasibility.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/benchmark/models.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/cli/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/cli/benchmark_cli.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/cli/legacy_cli.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/constraints/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/constraints/type_iis.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/exporter.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/optimizer.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/core/interfaces/validator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/nbenthamiana_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/nbenthamiana_golden_set.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/ntabacum_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_filtered_stats.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_all_derived_manifest.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_filtered_stats.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/nbev11_cds_hc_derived_manifest.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_derived_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_derived_manifest.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/profiles/qld183_v103_filtered_stats.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/reference/reference_policy_manifest.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/templates/high_expression.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/templates/standard_expression.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/data/wolffia_globosa_codons.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/db/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/design_review.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/acquisition.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/acquisition_logger.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/filter.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/generator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/panel_builder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/schemas.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/slate.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/discovery/traits.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/balanced_optimizer.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_adapter.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2_1.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/dp_v2_1_1.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/adapter.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/diagnostics.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/inference.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/models/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/models/mbart_codon.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/lm/tokenizer/control_tokenizer.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/codon_table_builder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/construct_builder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/exporter.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/optimizer.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/pipeline.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/domesticator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/reverse_translator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/rules/rule_engine.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/scoring.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/scoring_ml.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/utils.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/profile/validator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/adapters.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/automaton.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/compiler.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/corpus_builder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/data/tokenizer.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/decoder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/interfaces.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/arch.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/baselines.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/engines/sllm/model/export_onnx.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/evaluation/evidence_logger.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/evaluation/models.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/io/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/io/fasta.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/io/validation.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/learning/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/learning/ranker.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/annotate.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/kd_scale.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/risk_classifier.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/sp_predict.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/protein_risk/tm_predict.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/model_registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/registry_loader.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/registry/versioning.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/review/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/rules/models.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/rules/registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/schemas/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/schemas/design_package.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/schemas/design_package.schema.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/schemas/run_config.schema.json +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/sops/config.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/construct_id.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/exceptions.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/restriction_sites.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/sequence_identity.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/sequence_validator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/utils/validation.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation/__init__.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation/cli.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation/package_generator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation_registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge/validation_report.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/dependency_links.txt +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/entry_points.txt +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/src/factorforge_cds.egg-info/requires.txt +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_baselines.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_cli_output_guard.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_codon_table_metadata.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_regression.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_benchmark_smoke.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_cai.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_codon_table_manifest.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_cross_engine_evaluation.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_db_connector.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_design_package_schema.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_design_package_semantics.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_design_package_serialization.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_design_review.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_docs_consistency.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_dp_v2_1_1.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_fasta_io.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_gc_content.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_host_profile_metadata.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_iupac_validation.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_legacy_cli.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_lm_alpha_contract.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_math_v2_dp_optimality.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_openbio_missing_metric_contract.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_optional_postgres.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_parameter_registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_partial_dp_rescue.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_prepare_lm_dataset.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_protein_risk.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_registry_production_sync.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_restriction_sites.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_sequence_validator.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_slm_decoder.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_sop_profile.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_translation_integrity.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_validation_contract_compat.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_validation_registry.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_validation_report.py +0 -0
- {factorforge_cds-3.5.3 → factorforge_cds-3.5.4}/tests/test_worked_example.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: factorforge-cds
|
|
3
|
-
Version: 3.5.
|
|
3
|
+
Version: 3.5.4
|
|
4
4
|
Summary: FactorForge - open-source CDS design and pre-synthesis sequence review by Eijex.
|
|
5
5
|
Author-email: Eijex <eijex.lab@gmail.com>
|
|
6
6
|
License-Expression: AGPL-3.0-only
|
|
@@ -51,7 +51,7 @@ Dynamic: license-file
|
|
|
51
51
|
|
|
52
52
|
FactorForge performs deterministic CDS design with CAI/GC metrics, PolyA-signal screening, and Golden Gate/MoClo-aware checks. It is positioned as a pre-synthesis review harness: it helps teams generate reproducible CDS candidates, inspect assembly-relevant sequence constraints, and package design metadata before downstream synthesis, cloning, or experimental review. Primary support: *N. benthamiana* (agroinfiltration). Experimental host context: Tobacco BY-2 (`--host by2`).
|
|
53
53
|
|
|
54
|
-
FactorForge v3.5.
|
|
54
|
+
FactorForge v3.5.4 uses independently versioned engines:
|
|
55
55
|
|
|
56
56
|
| Generation | Engine | Version | Availability |
|
|
57
57
|
|---|---|---:|---|
|
|
@@ -107,7 +107,7 @@ are available, a separately evaluated 5′ MFE value. It is not the default; its
|
|
|
107
107
|
single-target calibration does not establish holdout generalization or biological
|
|
108
108
|
performance.
|
|
109
109
|
|
|
110
|
-
The v3.5.
|
|
110
|
+
The v3.5.x discovery-slate surface generates versioned Top-K research candidates,
|
|
111
111
|
applies a shared deterministic hard-constraint filter, and records generator and
|
|
112
112
|
fallback lineage. The sLLM path is disabled by default. A partial-DP rescue solves
|
|
113
113
|
an exact suffix conditioned on the retained prefix; it is not a claim of global
|
|
@@ -127,7 +127,7 @@ FactorForge outputs are **in-silico only** and have not been experimentally vali
|
|
|
127
127
|
## Citing
|
|
128
128
|
|
|
129
129
|
```
|
|
130
|
-
FactorForge v3.5.
|
|
130
|
+
FactorForge v3.5.4 (2026). Open-source constraint-based CDS design and sequence review.
|
|
131
131
|
Eijex. https://github.com/eijex/factorforge-cds
|
|
132
132
|
```
|
|
133
133
|
|
|
@@ -139,9 +139,17 @@ Mun-Kyu Kim ([@eijex](https://github.com/eijex))
|
|
|
139
139
|
|
|
140
140
|
## Optional PostgreSQL support
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
FactorForge design, CLI, Python API, and file export do not require a database.
|
|
143
|
+
PostgreSQL persistence is an explicit Eijex integration path for retaining shared
|
|
144
|
+
campaign and candidate identities; it is not enabled by default.
|
|
145
|
+
|
|
146
|
+
Install `pip install "factorforge-cds[postgres]"` only when using that integration.
|
|
147
|
+
The deployment must also provide a compatible `eijex-db-core` package and set
|
|
148
|
+
`FACTORFORGE_DATABASE_URL`. FactorForge contains no default database credentials and
|
|
149
|
+
does not silently fall back to another backend. See [Persistence](docs/persistence.md).
|
|
150
|
+
|
|
151
|
+
Explicit local SQLite research checkpoints in `factorforge.db.connector` remain a
|
|
152
|
+
separate local-only utility and are not the shared DBTL system of record.
|
|
145
153
|
|
|
146
154
|
## License
|
|
147
155
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
FactorForge performs deterministic CDS design with CAI/GC metrics, PolyA-signal screening, and Golden Gate/MoClo-aware checks. It is positioned as a pre-synthesis review harness: it helps teams generate reproducible CDS candidates, inspect assembly-relevant sequence constraints, and package design metadata before downstream synthesis, cloning, or experimental review. Primary support: *N. benthamiana* (agroinfiltration). Experimental host context: Tobacco BY-2 (`--host by2`).
|
|
16
16
|
|
|
17
|
-
FactorForge v3.5.
|
|
17
|
+
FactorForge v3.5.4 uses independently versioned engines:
|
|
18
18
|
|
|
19
19
|
| Generation | Engine | Version | Availability |
|
|
20
20
|
|---|---|---:|---|
|
|
@@ -70,7 +70,7 @@ are available, a separately evaluated 5′ MFE value. It is not the default; its
|
|
|
70
70
|
single-target calibration does not establish holdout generalization or biological
|
|
71
71
|
performance.
|
|
72
72
|
|
|
73
|
-
The v3.5.
|
|
73
|
+
The v3.5.x discovery-slate surface generates versioned Top-K research candidates,
|
|
74
74
|
applies a shared deterministic hard-constraint filter, and records generator and
|
|
75
75
|
fallback lineage. The sLLM path is disabled by default. A partial-DP rescue solves
|
|
76
76
|
an exact suffix conditioned on the retained prefix; it is not a claim of global
|
|
@@ -90,7 +90,7 @@ FactorForge outputs are **in-silico only** and have not been experimentally vali
|
|
|
90
90
|
## Citing
|
|
91
91
|
|
|
92
92
|
```
|
|
93
|
-
FactorForge v3.5.
|
|
93
|
+
FactorForge v3.5.4 (2026). Open-source constraint-based CDS design and sequence review.
|
|
94
94
|
Eijex. https://github.com/eijex/factorforge-cds
|
|
95
95
|
```
|
|
96
96
|
|
|
@@ -102,9 +102,17 @@ Mun-Kyu Kim ([@eijex](https://github.com/eijex))
|
|
|
102
102
|
|
|
103
103
|
## Optional PostgreSQL support
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
FactorForge design, CLI, Python API, and file export do not require a database.
|
|
106
|
+
PostgreSQL persistence is an explicit Eijex integration path for retaining shared
|
|
107
|
+
campaign and candidate identities; it is not enabled by default.
|
|
108
|
+
|
|
109
|
+
Install `pip install "factorforge-cds[postgres]"` only when using that integration.
|
|
110
|
+
The deployment must also provide a compatible `eijex-db-core` package and set
|
|
111
|
+
`FACTORFORGE_DATABASE_URL`. FactorForge contains no default database credentials and
|
|
112
|
+
does not silently fall back to another backend. See [Persistence](docs/persistence.md).
|
|
113
|
+
|
|
114
|
+
Explicit local SQLite research checkpoints in `factorforge.db.connector` remain a
|
|
115
|
+
separate local-only utility and are not the shared DBTL system of record.
|
|
108
116
|
|
|
109
117
|
## License
|
|
110
118
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "factorforge-cds"
|
|
7
|
-
version = "3.5.
|
|
7
|
+
version = "3.5.4"
|
|
8
8
|
description = "FactorForge - open-source CDS design and pre-synthesis sequence review by Eijex."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "AGPL-3.0-only"
|
|
@@ -56,6 +56,7 @@ factorforge-validate = "factorforge.validation.cli:main"
|
|
|
56
56
|
|
|
57
57
|
[tool.setuptools.packages.find]
|
|
58
58
|
where = ["src"]
|
|
59
|
+
include = ["factorforge*"]
|
|
59
60
|
|
|
60
61
|
[tool.setuptools.package-data]
|
|
61
62
|
"factorforge" = ["data/*.json", "data/templates/*.json", "data/profiles/*.json", "data/reference/*.json", "schemas/*.json", "registry/*.json"]
|
|
@@ -68,4 +69,10 @@ pythonpath = ["src"]
|
|
|
68
69
|
[tool.ruff]
|
|
69
70
|
line-length = 100
|
|
70
71
|
target-version = "py310"
|
|
71
|
-
|
|
72
|
+
# Versioned reproducibility deposits are immutable evidence, not maintained code.
|
|
73
|
+
exclude = ["archive", "reproducibility"]
|
|
74
|
+
|
|
75
|
+
[tool.ruff.lint.per-file-ignores]
|
|
76
|
+
# Tests initialize paths/optional-dependency skips before importing modules.
|
|
77
|
+
"tests/**" = ["E402"]
|
|
78
|
+
"benchmarks/test_data/test_toy_flip.py" = ["E402"]
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import collections
|
|
5
6
|
import json
|
|
6
7
|
import math
|
|
7
8
|
from collections import Counter
|
|
@@ -434,9 +435,6 @@ def detect_invalid_codons(sequence: str) -> list[dict[str, Any]]:
|
|
|
434
435
|
elif codon not in STANDARD_GENETIC_CODE:
|
|
435
436
|
findings.append({"start": start, "end": start + 3, "codon": codon, "reason": "unknown"})
|
|
436
437
|
return findings
|
|
437
|
-
import math
|
|
438
|
-
import collections
|
|
439
|
-
|
|
440
438
|
def calculate_synonymous_entropy(sequence, codon_to_aa):
|
|
441
439
|
from factorforge.analysis.metrics import _codons
|
|
442
440
|
codons = _codons(sequence)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import List, Dict
|
|
1
|
+
from typing import List, Dict
|
|
2
2
|
import time
|
|
3
3
|
import hashlib
|
|
4
4
|
|
|
@@ -108,7 +108,6 @@ class BenchmarkRunner:
|
|
|
108
108
|
pass_counts = {}
|
|
109
109
|
total_targets = len(set(r.target_id for r in results))
|
|
110
110
|
|
|
111
|
-
cai_sums = {}
|
|
112
111
|
cai_vals = {}
|
|
113
112
|
gc_sums = {}
|
|
114
113
|
engine_counts = {}
|
|
@@ -904,71 +904,6 @@ def ingest_outcome(dataset_file, measurements_file, output):
|
|
|
904
904
|
|
|
905
905
|
|
|
906
906
|
|
|
907
|
-
@cli.command("audit")
|
|
908
|
-
@click.argument("sequence_fasta", type=click.Path(exists=True))
|
|
909
|
-
@click.option("--reference-codon-profile", default="nbev11", help="Reference codon profile to use")
|
|
910
|
-
@click.option("--exclude-region", help="Region to exclude from analysis (e.g., SP:1-60 or 1-60)")
|
|
911
|
-
@click.option("--output", "-o", type=click.Path(), help="Output path for JSON report")
|
|
912
|
-
def audit(sequence_fasta, reference_codon_profile, exclude_region, output):
|
|
913
|
-
"""
|
|
914
|
-
Run generic sequence audit to report codon usage, CAI, GC, and AA distribution.
|
|
915
|
-
"""
|
|
916
|
-
_configure_stdio()
|
|
917
|
-
from factorforge.engines.profile.utils import parse_fasta_records
|
|
918
|
-
from factorforge.analysis.metrics import load_codon_usage_table, calculate_cai, calculate_gc, codon_usage_profile, translate_dna
|
|
919
|
-
import hashlib
|
|
920
|
-
import json
|
|
921
|
-
|
|
922
|
-
from pathlib import Path
|
|
923
|
-
fasta_records = parse_fasta_records(Path(sequence_fasta).read_text(encoding='utf-8'))
|
|
924
|
-
if not fasta_records:
|
|
925
|
-
raise click.UsageError(f"No FASTA records found in {sequence_fasta}")
|
|
926
|
-
|
|
927
|
-
results = {}
|
|
928
|
-
for header, sequence in fasta_records:
|
|
929
|
-
seq = sequence.upper().replace("U", "T")
|
|
930
|
-
seq = "".join(seq.split())
|
|
931
|
-
|
|
932
|
-
if exclude_region:
|
|
933
|
-
parts = exclude_region.split(":")
|
|
934
|
-
range_str = parts[-1]
|
|
935
|
-
try:
|
|
936
|
-
start, end = map(int, range_str.split("-"))
|
|
937
|
-
seq = seq[end:] # Naively assume we're removing the N-terminal SP 1-N.
|
|
938
|
-
except ValueError:
|
|
939
|
-
click.echo(f"Warning: Could not parse exclude region {exclude_region}", err=True)
|
|
940
|
-
|
|
941
|
-
table = load_codon_usage_table()
|
|
942
|
-
|
|
943
|
-
cai = calculate_cai(seq, table.codon_weights)
|
|
944
|
-
gc = calculate_gc(seq)
|
|
945
|
-
usage = codon_usage_profile(seq)
|
|
946
|
-
|
|
947
|
-
aa_seq = translate_dna(seq)
|
|
948
|
-
aa_counts = {}
|
|
949
|
-
for aa in aa_seq:
|
|
950
|
-
aa_counts[aa] = aa_counts.get(aa, 0) + 1
|
|
951
|
-
|
|
952
|
-
res = {
|
|
953
|
-
"input_sha256": hashlib.sha256(sequence.encode('utf-8')).hexdigest(),
|
|
954
|
-
"codon_table_sha256": hashlib.sha256(json.dumps(table.codon_weights, sort_keys=True).encode()).hexdigest(),
|
|
955
|
-
"tool_version": "1.0",
|
|
956
|
-
"cai": cai,
|
|
957
|
-
"gc_percent": gc,
|
|
958
|
-
"length": len(seq),
|
|
959
|
-
"aa_counts": aa_counts,
|
|
960
|
-
"codon_counts": usage,
|
|
961
|
-
}
|
|
962
|
-
results[header or "Sequence"] = res
|
|
963
|
-
|
|
964
|
-
if output:
|
|
965
|
-
with open(output, "w", encoding="utf-8") as f:
|
|
966
|
-
json.dump(results, f, indent=2)
|
|
967
|
-
click.echo(f"Audit report saved to: {output}")
|
|
968
|
-
else:
|
|
969
|
-
click.echo(json.dumps(results, indent=2))
|
|
970
|
-
|
|
971
|
-
|
|
972
907
|
@cli.command("audit")
|
|
973
908
|
@click.argument("sequence_fasta", type=click.Path(exists=True))
|
|
974
909
|
@click.option("--reference-codon-profile", default="nbev11", help="Reference codon profile to use")
|
|
@@ -6,9 +6,9 @@ Stage 3 (Real 7-D Normalized Trait Space Furthest-First Diversity Selection).
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
from dataclasses import dataclass
|
|
9
|
+
from dataclasses import dataclass
|
|
10
10
|
import math
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import Dict, List, Optional
|
|
12
12
|
|
|
13
13
|
from factorforge.analysis.metrics import calculate_gc_windows, detect_homopolymers
|
|
14
14
|
from factorforge.core.host_model import HostModel
|
|
@@ -11,7 +11,6 @@ Stage 5: Exact Top-K Slate Assembly (Successive Pareto Fronts + Boundary Furthes
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
-
from dataclasses import dataclass, field
|
|
15
14
|
import datetime
|
|
16
15
|
import logging
|
|
17
16
|
import time
|
|
@@ -21,7 +20,6 @@ from factorforge.core.host_model import HostModel
|
|
|
21
20
|
from factorforge.core.reranker import (
|
|
22
21
|
MultiFactorSlateReranker,
|
|
23
22
|
PhenotypeDiversitySelector,
|
|
24
|
-
ScoredCandidate,
|
|
25
23
|
)
|
|
26
24
|
from factorforge.core.slate_generator import (
|
|
27
25
|
DEFAULT_FORBIDDEN_SITES,
|