axis-synome 0.1.0.dev71__tar.gz → 0.1.0.dev72__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.
- {axis_synome-0.1.0.dev71/src/axis_synome.egg-info → axis_synome-0.1.0.dev72}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/pyproject.toml +25 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/_version.py +2 -2
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/checks/numeric_fidelity.py +1 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/converters.py +7 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/entity_parser.py +11 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/formula_extraction.py +2 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/identity.py +16 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/render.py +1 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/statement_handler.py +2 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets.py +8 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/networks.py +7 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/protocol_sets.py +9 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/tokens.py +8 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/codegen_test/entities/agents.py +7 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/audit_firms.py +17 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/smart_contract_risk.py +20 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72/src/axis_synome.egg-info}/PKG-INFO +1 -1
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/SOURCES.txt +7 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/references/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/suraf/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/suraf/entities/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/suraf/formulas/__init__.py +0 -0
- axis_synome-0.1.0.dev72/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/.flake8 +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/AGENTS.md +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/CLAUDE.md +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/README.md +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/WRITING_SPECS.md +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/01_prime_basics.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/02_assets_and_tokens_of_a_prime.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/03_inverse_lookups.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/04_atlas_provenance.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/05_feeding_a_formula.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/README.md +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/setup.cfg +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/export_entities.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/__main__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/ast_normalizer.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/ast_utils.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/helpers.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/converter.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/formatter.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/parse_expressions.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/validation.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/all_entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec/crypto_lending → axis_synome-0.1.0.dev72/src/axis_synome/spec/asc}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/alm_proxies.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets_by_prime.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets_missing_from_atlas.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/primes.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/types.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec/crypto_lending → axis_synome-0.1.0.dev72/src/axis_synome/spec/asc}/formulas/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec/risk_capital/entities → axis_synome-0.1.0.dev72/src/axis_synome/spec/codegen_test}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec/risk_capital/formulas → axis_synome-0.1.0.dev72/src/axis_synome/spec/codegen_test/entities}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec/risk_capital/formulas/financial_rrc → axis_synome-0.1.0.dev72/src/axis_synome/spec/crypto_lending}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec_support → axis_synome-0.1.0.dev72/src/axis_synome/spec/crypto_lending/formulas}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/capital_types.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/risk_categories.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/aggregate_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/capital_composition.py +0 -0
- {axis_synome-0.1.0.dev71/src/axis_synome/spec_support/runtime → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/entities}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/examples/risk_capital_walkthrough.ipynb +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/parser → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/formulas}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/risk_capital → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/formulas/financial_rrc}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/instance_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/jrc_loss_allocation.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/total_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/README.md +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/risk_capital/financial_rrc → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/risk_capital/formulas → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf/entities}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/risk_capital/smart_contract_rrc → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf/formulas}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/__main__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/cli.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/spec_inspect → axis_synome-0.1.0.dev72/src/axis_synome/spec_support}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/evm_address.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/math_protocol.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/pendle_validation.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/references/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/references/graph.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/spec_support → axis_synome-0.1.0.dev72/src/axis_synome/spec_support/runtime}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/base.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/math.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/reference.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/validated_str.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/checker.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/python_subset.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/dependency_links.txt +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/entry_points.txt +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/requires.txt +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/top_level.txt +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/conftest.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/mocks.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asset_categories.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_dab.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_evm_address.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_resting_asc.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/spec_support/references → axis_synome-0.1.0.dev72/tests/axis_synome/parser}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_latex_chain.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_mixed_module.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_set_membership.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/graph_validator.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/test_formatter.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/test_render.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_entity_parser.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_formula_extraction.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_helpers.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_parser.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_set_membership.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/spec_support/runtime → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/suraf → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/financial_rrc}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/suraf/entities → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/formulas}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/suraf/formulas → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/smart_contract_rrc}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_a321_a322_integration.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_aggregate_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_capital_composition.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_instance_rrc.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_jrc_loss_allocation.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_total_risk_capital.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/scripts/test_export_entities.py +0 -0
- {axis_synome-0.1.0.dev71/tests/axis_synome/suraf/suraf_client → axis_synome-0.1.0.dev72/tests/axis_synome/spec_inspect}/__init__.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_inspect/test_cli.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_checker.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/tests/axis_synome/test_examples.py +0 -0
- {axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/uv.lock +0 -0
|
@@ -79,6 +79,14 @@ select = [
|
|
|
79
79
|
"ARG",
|
|
80
80
|
"PTH",
|
|
81
81
|
"PGH004",
|
|
82
|
+
# Public docstring presence — scoped to ``src/axis_synome/spec/**`` via
|
|
83
|
+
# the per-file-ignores table below. Spec docstrings are the carrier for
|
|
84
|
+
# ``:source_uuid:`` provenance (see ``WRITING_SPECS.md``); a missing one
|
|
85
|
+
# is a real bug, not a style nit.
|
|
86
|
+
"D101", # missing docstring in public class
|
|
87
|
+
"D102", # missing docstring in public method
|
|
88
|
+
"D103", # missing docstring in public function
|
|
89
|
+
"D106", # missing docstring in public nested class
|
|
82
90
|
]
|
|
83
91
|
ignore = ["E402", "E501"]
|
|
84
92
|
|
|
@@ -86,3 +94,20 @@ ignore = ["E402", "E501"]
|
|
|
86
94
|
# put `# ruff: noqa: <CODE>` (file-level) or `# noqa: <CODE>` (line-level) in
|
|
87
95
|
# the source file itself, with a short reason. Keeps the rationale next to the
|
|
88
96
|
# code it justifies and avoids a central table that drifts as files move.
|
|
97
|
+
#
|
|
98
|
+
# Exception: the D101/D102/D103/D106 rules above are conceptually scoped to
|
|
99
|
+
# ``src/axis_synome/spec/**`` only. Ruff has no "select-only-here" syntax, so
|
|
100
|
+
# we disable them everywhere else via the per-file-ignores table below. New
|
|
101
|
+
# top-level directories under ``axis-synome/`` need a row here.
|
|
102
|
+
|
|
103
|
+
[tool.ruff.lint.per-file-ignores]
|
|
104
|
+
"src/axis_synome/__init__.py" = ["D101", "D102", "D103", "D106"]
|
|
105
|
+
"src/axis_synome/_version.py" = ["D101", "D102", "D103", "D106"]
|
|
106
|
+
"src/axis_synome/export_entities.py" = ["D101", "D102", "D103", "D106"]
|
|
107
|
+
"src/axis_synome/spec_support/**" = ["D101", "D102", "D103", "D106"]
|
|
108
|
+
"src/axis_synome/spec_validator/**" = ["D101", "D102", "D103", "D106"]
|
|
109
|
+
"src/axis_synome/spec_inspect/**" = ["D101", "D102", "D103", "D106"]
|
|
110
|
+
"src/axis_synome/spec/**/examples/**" = ["D101", "D102", "D103", "D106"]
|
|
111
|
+
"examples/**" = ["D101", "D102", "D103", "D106"]
|
|
112
|
+
"**/*.ipynb" = ["D101", "D102", "D103", "D106"]
|
|
113
|
+
"tests/**" = ["D101", "D102", "D103", "D106"]
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, 0, '
|
|
21
|
+
__version__ = version = '0.1.0.dev72'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 0, 'dev72')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -51,14 +51,17 @@ _BASE_LOCAL_DICT: dict[str, Any] = {
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def ensure_sympy_expr(value: sp.Basic) -> sp.Expr:
|
|
54
|
+
"""Coerce a SymPy basic into an expression type."""
|
|
54
55
|
return cast(sp.Expr, value)
|
|
55
56
|
|
|
56
57
|
|
|
57
58
|
def ensure_sympy_bool(value: sp.Basic) -> SymBoolean:
|
|
59
|
+
"""Coerce a SymPy basic into a Boolean type."""
|
|
58
60
|
return cast(SymBoolean, value)
|
|
59
61
|
|
|
60
62
|
|
|
61
63
|
def convert_python_constant(value: object) -> sp.Basic:
|
|
64
|
+
"""Lower a Python scalar constant to the matching SymPy atom."""
|
|
62
65
|
if isinstance(value, bool):
|
|
63
66
|
return sp.true if value else sp.false
|
|
64
67
|
if isinstance(value, int):
|
|
@@ -164,6 +167,7 @@ def get_constant_set(scope: dict[str, Any] | None, name: str) -> list[object] |
|
|
|
164
167
|
|
|
165
168
|
|
|
166
169
|
def lower_unary_operator(op: ast.unaryop, operand: sp.Basic) -> sp.Basic:
|
|
170
|
+
"""Lower a Python unary operator to SymPy."""
|
|
167
171
|
operand_expr = ensure_sympy_expr(operand)
|
|
168
172
|
if isinstance(op, ast.USub):
|
|
169
173
|
return sp.Mul(sp.Integer(-1), operand_expr, evaluate=False)
|
|
@@ -175,6 +179,7 @@ def lower_unary_operator(op: ast.unaryop, operand: sp.Basic) -> sp.Basic:
|
|
|
175
179
|
|
|
176
180
|
|
|
177
181
|
def lower_binary_operator(op: ast.operator, left: sp.Basic, right: sp.Basic) -> sp.Basic:
|
|
182
|
+
"""Lower a Python binary operator to SymPy."""
|
|
178
183
|
left_expr = ensure_sympy_expr(left)
|
|
179
184
|
right_expr = ensure_sympy_expr(right)
|
|
180
185
|
if isinstance(op, ast.Add):
|
|
@@ -197,6 +202,7 @@ def lower_binary_operator(op: ast.operator, left: sp.Basic, right: sp.Basic) ->
|
|
|
197
202
|
|
|
198
203
|
|
|
199
204
|
def lower_boolean_operator(op: ast.boolop, values: list[sp.Basic]) -> sp.Basic:
|
|
205
|
+
"""Lower a Python boolean operator to SymPy."""
|
|
200
206
|
items = [ensure_sympy_bool(value) for value in values]
|
|
201
207
|
if isinstance(op, ast.And):
|
|
202
208
|
return sp.And(*items)
|
|
@@ -213,6 +219,7 @@ def lower_comparison_operator(
|
|
|
213
219
|
in_handler: Callable[[sp.Basic, sp.Basic], sp.Basic] | None = None,
|
|
214
220
|
not_in_handler: Callable[[sp.Basic, sp.Basic], sp.Basic] | None = None,
|
|
215
221
|
) -> sp.Basic:
|
|
222
|
+
"""Lower a Python comparison operator to SymPy."""
|
|
216
223
|
if isinstance(op, ast.Gt):
|
|
217
224
|
return sp.Gt(ensure_sympy_expr(left), ensure_sympy_expr(right), evaluate=False)
|
|
218
225
|
if isinstance(op, ast.GtE):
|
|
@@ -34,6 +34,8 @@ _STATIC_SCOPE_KEY = "\x00static_scope"
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class StatementRole(StrEnum):
|
|
37
|
+
"""Role assigned to a lowered statement identity."""
|
|
38
|
+
|
|
37
39
|
INPUT = "input"
|
|
38
40
|
DERIVED = "derived"
|
|
39
41
|
OUTPUT = "output"
|
|
@@ -41,6 +43,8 @@ class StatementRole(StrEnum):
|
|
|
41
43
|
|
|
42
44
|
@dataclass
|
|
43
45
|
class StatementIdentity:
|
|
46
|
+
"""A single lowered statement in the identity graph."""
|
|
47
|
+
|
|
44
48
|
identity: str
|
|
45
49
|
expr: str
|
|
46
50
|
deps: list[str]
|
|
@@ -69,6 +73,7 @@ class SymbolicStruct(sp.Expr):
|
|
|
69
73
|
precedence = _PRECEDENCE["Atom"]
|
|
70
74
|
|
|
71
75
|
def __new__(cls, name: str):
|
|
76
|
+
"""Create a symbolic stand-in for chained access expressions."""
|
|
72
77
|
obj = super().__new__(cls)
|
|
73
78
|
obj._struct_name = name
|
|
74
79
|
# Initialise the SymPy internal ``_args`` slot so traversal
|
|
@@ -99,6 +104,8 @@ class SymbolicStruct(sp.Expr):
|
|
|
99
104
|
|
|
100
105
|
|
|
101
106
|
class ContainsBool(sp.logic.boolalg.BooleanFunction):
|
|
107
|
+
"""Opaque boolean wrapper for membership tests."""
|
|
108
|
+
|
|
102
109
|
nargs = 2
|
|
103
110
|
|
|
104
111
|
@override
|
|
@@ -213,10 +220,13 @@ def has_entity_params(func: FunctionType) -> bool:
|
|
|
213
220
|
|
|
214
221
|
|
|
215
222
|
class IdentityProgramBuilder:
|
|
223
|
+
"""Lower a spec function body into statement identities."""
|
|
224
|
+
|
|
216
225
|
def __init__(self, func: FunctionType) -> None:
|
|
217
226
|
self.func = func
|
|
218
227
|
|
|
219
228
|
def build(self) -> tuple[list[StatementIdentity], str]:
|
|
229
|
+
"""Build the statement identity sequence and return expression."""
|
|
220
230
|
source = inspect.getsource(self.func)
|
|
221
231
|
tree = ast.parse(source)
|
|
222
232
|
func_def = next(node for node in tree.body if isinstance(node, ast.FunctionDef))
|
|
@@ -671,6 +681,7 @@ def reconstruct_sympy_expression(
|
|
|
671
681
|
statements: list[StatementIdentity],
|
|
672
682
|
module_globals: dict[str, Any] | None = None,
|
|
673
683
|
) -> sp.Basic:
|
|
684
|
+
"""Reconstruct the final SymPy expression from lowered statements."""
|
|
674
685
|
env: dict[str, sp.Basic] = {}
|
|
675
686
|
if module_globals is not None:
|
|
676
687
|
# Carry module globals alongside the substitution environment so the
|
|
@@ -307,59 +307,73 @@ class IdentityData:
|
|
|
307
307
|
|
|
308
308
|
@property
|
|
309
309
|
def fqn(self) -> str:
|
|
310
|
+
"""Return the canonical fully qualified name."""
|
|
310
311
|
return self._fqn
|
|
311
312
|
|
|
312
313
|
@property
|
|
313
314
|
def formula_id(self) -> str:
|
|
315
|
+
"""Return the formula identifier, falling back to node_id."""
|
|
314
316
|
return self._formula_id or self.node_id
|
|
315
317
|
|
|
316
318
|
@property
|
|
317
319
|
def parameter_id(self) -> str:
|
|
320
|
+
"""Return the parameter identifier, falling back to node_id."""
|
|
318
321
|
return self._parameter_id or self.node_id
|
|
319
322
|
|
|
320
323
|
@property
|
|
321
324
|
def symbol(self) -> str:
|
|
325
|
+
"""Return the exposed symbol name."""
|
|
322
326
|
return self.node_id
|
|
323
327
|
|
|
324
328
|
@property
|
|
325
329
|
def output_units(self) -> str | None:
|
|
330
|
+
"""Return the canonical output units."""
|
|
326
331
|
return self.units
|
|
327
332
|
|
|
328
333
|
@property
|
|
329
334
|
def default_value(self) -> SupportedParameterType | None:
|
|
335
|
+
"""Return the canonical default value."""
|
|
330
336
|
return self.value
|
|
331
337
|
|
|
332
338
|
@property
|
|
333
339
|
def value_type(self) -> str:
|
|
340
|
+
"""Return the scalar type name for the stored value."""
|
|
334
341
|
return infer_value_type(self.value) or "float"
|
|
335
342
|
|
|
336
343
|
# Codegen metadata convenience properties
|
|
337
344
|
@property
|
|
338
345
|
def codegen_source_module(self) -> str | None:
|
|
346
|
+
"""Return the originating source module for code generation."""
|
|
339
347
|
return self.codegen.source_module
|
|
340
348
|
|
|
341
349
|
@property
|
|
342
350
|
def codegen_source_symbol(self) -> str | None:
|
|
351
|
+
"""Return the originating source symbol for code generation."""
|
|
343
352
|
return self.codegen.source_symbol
|
|
344
353
|
|
|
345
354
|
@property
|
|
346
355
|
def codegen_symbol_kind(self) -> str | None:
|
|
356
|
+
"""Return the kind of source symbol used for code generation."""
|
|
347
357
|
return self.codegen.symbol_kind
|
|
348
358
|
|
|
349
359
|
@property
|
|
350
360
|
def codegen_type_expr(self) -> str | None:
|
|
361
|
+
"""Return the generated type expression, if any."""
|
|
351
362
|
return self.codegen.type_expr
|
|
352
363
|
|
|
353
364
|
@property
|
|
354
365
|
def codegen_default_expr(self) -> str | None:
|
|
366
|
+
"""Return the generated default expression, if any."""
|
|
355
367
|
return self.codegen.default_expr
|
|
356
368
|
|
|
357
369
|
@property
|
|
358
370
|
def codegen_imports(self) -> list[str]:
|
|
371
|
+
"""Return the imports required by generated code."""
|
|
359
372
|
return self.codegen.imports
|
|
360
373
|
|
|
361
374
|
@classmethod
|
|
362
375
|
def from_dict(cls, doc: dict[str, Any]) -> Self:
|
|
376
|
+
"""Build an identity from a raw document mapping."""
|
|
363
377
|
expression = doc.get("expression") or doc.get("expression_ast")
|
|
364
378
|
return cls(
|
|
365
379
|
node_id=str(doc.get("node_id") or doc.get("formula_id") or doc.get("parameter_id")),
|
|
@@ -378,6 +392,7 @@ class IdentityData:
|
|
|
378
392
|
)
|
|
379
393
|
|
|
380
394
|
def evaluate(self, values: dict[str, float]) -> float:
|
|
395
|
+
"""Evaluate the SymPy expression with the provided substitutions."""
|
|
381
396
|
if self.sympy_expr is None:
|
|
382
397
|
raise ValueError(f"Identity '{self.node_id}' has no expression to evaluate")
|
|
383
398
|
symbol_values = {sp.Symbol(k): sp.Float(v) for k, v in values.items()}
|
|
@@ -385,6 +400,7 @@ class IdentityData:
|
|
|
385
400
|
return float(expr.subs(symbol_values).evalf())
|
|
386
401
|
|
|
387
402
|
def to_dict(self) -> dict[str, object]:
|
|
403
|
+
"""Serialize the identity to a document mapping."""
|
|
388
404
|
doc: dict[str, object] = {
|
|
389
405
|
"@type": "Identity",
|
|
390
406
|
"@id": f"Identity/{self.node_id}",
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/statement_handler.py
RENAMED
|
@@ -309,6 +309,7 @@ class StatementHandler:
|
|
|
309
309
|
return [element_formula, final_formula]
|
|
310
310
|
|
|
311
311
|
def handle_for_loop(self, _for_stmt: ast.For):
|
|
312
|
+
"""Reject for-loops, which are not supported for SymPy lowering."""
|
|
312
313
|
raise NotImplementedError(
|
|
313
314
|
"For-loops are not convertible to SymPy expressions; "
|
|
314
315
|
"specs must use comprehensions (sum, list, etc.) or function composition instead. "
|
|
@@ -325,6 +326,7 @@ class StatementHandler:
|
|
|
325
326
|
formulas: list,
|
|
326
327
|
codegen_formula_metadata: dict[str, str | list[str] | None] | None = None,
|
|
327
328
|
) -> list:
|
|
329
|
+
"""Lower the return statement into one or more output formulas."""
|
|
328
330
|
if return_stmt.value is None:
|
|
329
331
|
raise ValueError("Return statement has no value")
|
|
330
332
|
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets.py
RENAMED
|
@@ -12,6 +12,14 @@ from axis_synome.spec_support.validated_dataclass import validated_dataclass
|
|
|
12
12
|
|
|
13
13
|
@validated_dataclass
|
|
14
14
|
class Asset:
|
|
15
|
+
"""An on-chain position held against a single ``(token, network, protocol)`` triple.
|
|
16
|
+
|
|
17
|
+
Carries the position's contract address plus the underlying token it
|
|
18
|
+
represents (relevant for wrapped/derived assets like aTokens or
|
|
19
|
+
erc4626 vault shares) and a non-empty set of ``AssetCategory`` tags
|
|
20
|
+
that drive eligibility checks in the ASC / DAB calculations.
|
|
21
|
+
"""
|
|
22
|
+
|
|
15
23
|
token: Token
|
|
16
24
|
network: Network
|
|
17
25
|
protocol: Protocol
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/networks.py
RENAMED
|
@@ -2,6 +2,13 @@ from enum import Enum
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class Network(Enum):
|
|
5
|
+
"""Blockchain networks where Sky-tracked assets can live.
|
|
6
|
+
|
|
7
|
+
Members serve as the canonical identifier on every ``Asset`` and drive
|
|
8
|
+
L1/L2 classification (``L2_NETWORKS``) and STL exporter chain labels
|
|
9
|
+
(``STL_CHAIN_BY_NETWORK``).
|
|
10
|
+
"""
|
|
11
|
+
|
|
5
12
|
ETHEREUM_MAINNET = "Ethereum Mainnet"
|
|
6
13
|
BASE = "Base"
|
|
7
14
|
ARBITRUM = "Arbitrum"
|
|
@@ -2,6 +2,15 @@ from enum import Enum, StrEnum
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class Protocol(Enum):
|
|
5
|
+
"""All protocols recognised as venues for Sky-tracked assets.
|
|
6
|
+
|
|
7
|
+
Membership in the module-level protocol sets below
|
|
8
|
+
(``LENDING_PROTOCOLS``, ``L1_PSM_PROTOCOLS``, ``L2_PSM_PROTOCOLS``,
|
|
9
|
+
``POOL_PROTOCOLS``, ``ATOKEN_PROTOCOLS``, ``ERC4626_PROTOCOLS``, …)
|
|
10
|
+
selects the protocol class that drives ASC eligibility, Latent ASC
|
|
11
|
+
classification, and STL exporter behaviour.
|
|
12
|
+
"""
|
|
13
|
+
|
|
5
14
|
# PSM
|
|
6
15
|
LITE_PSM = "LitePSM"
|
|
7
16
|
PSM3 = "PSM3"
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/tokens.py
RENAMED
|
@@ -2,6 +2,14 @@ from enum import Enum
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class Token(Enum):
|
|
5
|
+
"""Every token symbol referenced by spec entities and constants.
|
|
6
|
+
|
|
7
|
+
Members appear on ``Asset.token`` / ``Asset.underlying_asset`` and in
|
|
8
|
+
category sets such as ``CASH_STABLECOINS``, ``DIRECT_ETHENA_TOKENS``,
|
|
9
|
+
and ``PENDLE_ETHENA_TOKENS`` that drive token-class-specific
|
|
10
|
+
calculations.
|
|
11
|
+
"""
|
|
12
|
+
|
|
5
13
|
USDC = "USDC"
|
|
6
14
|
USDS = "USDS"
|
|
7
15
|
DAI = "DAI"
|
|
@@ -3,6 +3,13 @@ from dataclasses import dataclass, field
|
|
|
3
3
|
|
|
4
4
|
@dataclass
|
|
5
5
|
class SampleAgent:
|
|
6
|
+
"""Minimal agent fixture used by the ``codegen_test`` package only.
|
|
7
|
+
|
|
8
|
+
Carries no Atlas semantics; it exists to give the entity-codegen tests a
|
|
9
|
+
small, stable dataclass to round-trip without depending on any
|
|
10
|
+
production spec entity.
|
|
11
|
+
"""
|
|
12
|
+
|
|
6
13
|
name: str
|
|
7
14
|
proxy: str | None = None
|
|
8
15
|
output_tokens: set[str] = field(default_factory=set)
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/audit_firms.py
RENAMED
|
@@ -33,6 +33,15 @@ MID_TIER_EFFECTIVENESS_COEFFICIENT: Final[float] = 0.5
|
|
|
33
33
|
|
|
34
34
|
@dataclass
|
|
35
35
|
class AuditFirmData:
|
|
36
|
+
"""Per-firm payload attached to each ``AuditFirm`` enum member.
|
|
37
|
+
|
|
38
|
+
Bundles the firm's display name, its tier (``TOP_TIER`` /
|
|
39
|
+
``MID_TIER``), and the effectiveness coefficient consumed by the
|
|
40
|
+
Audit Factor formula. Storing this as the enum value keeps a single
|
|
41
|
+
point of truth: changing a firm's tier updates its coefficient
|
|
42
|
+
everywhere automatically.
|
|
43
|
+
"""
|
|
44
|
+
|
|
36
45
|
name: str
|
|
37
46
|
tier: AuditFirmTier
|
|
38
47
|
effectiveness_coefficient: float
|
|
@@ -280,6 +289,14 @@ MID_TIER_AUDIT_FIRMS: Final[set[AuditFirm]] = {
|
|
|
280
289
|
|
|
281
290
|
@validated_dataclass
|
|
282
291
|
class AuditRecord:
|
|
292
|
+
"""A single audit performed on a protocol by a recognised ``AuditFirm``.
|
|
293
|
+
|
|
294
|
+
The covered/total line counts give the audit's coverage ratio and the
|
|
295
|
+
age (in years) gives its decay factor; together with the firm's
|
|
296
|
+
effectiveness coefficient they feed the Audit Factor calculation
|
|
297
|
+
(Atlas ``A.3.2.2.1.2.2.5``).
|
|
298
|
+
"""
|
|
299
|
+
|
|
283
300
|
firm: AuditFirm
|
|
284
301
|
lines_of_code_covered: Annotated[int, Field(ge=0)]
|
|
285
302
|
"""Lines of code covered by this audit.
|
|
@@ -12,6 +12,17 @@ from axis_synome.spec_support.validated_dataclass import validated_dataclass
|
|
|
12
12
|
|
|
13
13
|
@validated_dataclass
|
|
14
14
|
class SmartContract:
|
|
15
|
+
"""A single smart contract under a protocol, with the code-complexity
|
|
16
|
+
inputs consumed by Smart Contract RRC.
|
|
17
|
+
|
|
18
|
+
The five complexity metrics (cyclomatic complexity, decision points,
|
|
19
|
+
external calls, inheritance depth, lines of code) are aggregated
|
|
20
|
+
across a protocol's covered contracts to feed Raw Code Complexity
|
|
21
|
+
Rating (Atlas ``A.3.2.2.1.2.2.3.3``); ``deployment_age_days`` feeds
|
|
22
|
+
the Lindy Adjustment Factor; ``upgradeable`` is captured for
|
|
23
|
+
forward compatibility.
|
|
24
|
+
"""
|
|
25
|
+
|
|
15
26
|
id: str
|
|
16
27
|
chain: Network
|
|
17
28
|
deployment_age_days: Annotated[float, Field(ge=0.0)]
|
|
@@ -101,6 +112,15 @@ class ProtocolSmartContractProfile:
|
|
|
101
112
|
|
|
102
113
|
@validated_dataclass
|
|
103
114
|
class CapitalMappingScenario:
|
|
115
|
+
"""Per-protocol exposure/collateral snapshot consumed by the Capital
|
|
116
|
+
Mapping step of the Smart Contract RRC calculation.
|
|
117
|
+
|
|
118
|
+
Splits total exposure (``e_tot``) into the portion absorbed by the
|
|
119
|
+
protocol's internal liquid surplus (``e_int`` / ``s_liq``) and the
|
|
120
|
+
portion that spills beyond it (``e_beyond``), against total
|
|
121
|
+
collateral (``c_tot``).
|
|
122
|
+
"""
|
|
123
|
+
|
|
104
124
|
e_int: Annotated[float, Field(ge=0.0)]
|
|
105
125
|
"""Internal Exposure: exposure that the protocol's internal liquid surplus
|
|
106
126
|
can absorb.
|
|
@@ -40,6 +40,7 @@ src/axis_synome/parser/latex/render.py
|
|
|
40
40
|
src/axis_synome/spec/__init__.py
|
|
41
41
|
src/axis_synome/spec/all_entities/__init__.py
|
|
42
42
|
src/axis_synome/spec/all_entities/lending_markets.py
|
|
43
|
+
src/axis_synome/spec/asc/__init__.py
|
|
43
44
|
src/axis_synome/spec/asc/entities/__init__.py
|
|
44
45
|
src/axis_synome/spec/asc/entities/alm_proxies.py
|
|
45
46
|
src/axis_synome/spec/asc/entities/asset_categories.py
|
|
@@ -51,6 +52,7 @@ src/axis_synome/spec/asc/entities/primes.py
|
|
|
51
52
|
src/axis_synome/spec/asc/entities/protocol_sets.py
|
|
52
53
|
src/axis_synome/spec/asc/entities/tokens.py
|
|
53
54
|
src/axis_synome/spec/asc/entities/types.py
|
|
55
|
+
src/axis_synome/spec/asc/formulas/__init__.py
|
|
54
56
|
src/axis_synome/spec/asc/formulas/asc.py
|
|
55
57
|
src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py
|
|
56
58
|
src/axis_synome/spec/asc/formulas/asc_incentive.py
|
|
@@ -58,6 +60,8 @@ src/axis_synome/spec/asc/formulas/dab.py
|
|
|
58
60
|
src/axis_synome/spec/asc/formulas/latent_asc.py
|
|
59
61
|
src/axis_synome/spec/asc/formulas/ratio_latent_asc.py
|
|
60
62
|
src/axis_synome/spec/asc/formulas/resting_asc.py
|
|
63
|
+
src/axis_synome/spec/codegen_test/__init__.py
|
|
64
|
+
src/axis_synome/spec/codegen_test/entities/__init__.py
|
|
61
65
|
src/axis_synome/spec/codegen_test/entities/agents.py
|
|
62
66
|
src/axis_synome/spec/crypto_lending/__init__.py
|
|
63
67
|
src/axis_synome/spec/crypto_lending/formulas/__init__.py
|
|
@@ -101,9 +105,12 @@ src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py
|
|
|
101
105
|
src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py
|
|
102
106
|
src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py
|
|
103
107
|
src/axis_synome/spec/suraf/README.md
|
|
108
|
+
src/axis_synome/spec/suraf/__init__.py
|
|
109
|
+
src/axis_synome/spec/suraf/entities/__init__.py
|
|
104
110
|
src/axis_synome/spec/suraf/entities/assessor_score.py
|
|
105
111
|
src/axis_synome/spec/suraf/entities/assets.py
|
|
106
112
|
src/axis_synome/spec/suraf/entities/mappings.py
|
|
113
|
+
src/axis_synome/spec/suraf/formulas/__init__.py
|
|
107
114
|
src/axis_synome/spec/suraf/formulas/crr.py
|
|
108
115
|
src/axis_synome/spec/suraf/formulas/scoring.py
|
|
109
116
|
src/axis_synome/spec_inspect/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/examples/02_assets_and_tokens_of_a_prime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/ast_normalizer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/__init__.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/converter.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/formatter.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/parse_expressions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/all_entities/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/__init__.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/alm_proxies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/primes.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/types.py
RENAMED
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/dab.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/latent_asc.py
RENAMED
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/resting_asc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/__init__.py
RENAMED
|
File without changes
|
{axis_synome-0.1.0.dev71 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/capital_types.py
RENAMED
|
File without changes
|