axis-synome 0.1.0.dev70__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.
Files changed (210) hide show
  1. {axis_synome-0.1.0.dev70/src/axis_synome.egg-info → axis_synome-0.1.0.dev72}/PKG-INFO +1 -1
  2. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/pyproject.toml +25 -0
  3. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/_version.py +2 -2
  4. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/checks/numeric_fidelity.py +1 -0
  5. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/converters.py +7 -0
  6. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/entity_parser.py +11 -0
  7. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/formula_extraction.py +2 -0
  8. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/identity.py +16 -0
  9. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/render.py +1 -0
  10. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/statement_handler.py +2 -0
  11. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets.py +8 -0
  12. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets_by_prime.py +15 -1
  13. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/networks.py +7 -0
  14. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/primes.py +4 -4
  15. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/protocol_sets.py +9 -0
  16. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/tokens.py +8 -0
  17. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/codegen_test/entities/agents.py +7 -0
  18. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/audit_firms.py +17 -0
  19. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/smart_contract_risk.py +20 -0
  20. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72/src/axis_synome.egg-info}/PKG-INFO +1 -1
  21. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/SOURCES.txt +7 -0
  22. axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/__init__.py +0 -0
  23. axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/references/__init__.py +0 -0
  24. axis_synome-0.1.0.dev72/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
  25. axis_synome-0.1.0.dev72/tests/axis_synome/suraf/__init__.py +0 -0
  26. axis_synome-0.1.0.dev72/tests/axis_synome/suraf/entities/__init__.py +0 -0
  27. axis_synome-0.1.0.dev72/tests/axis_synome/suraf/formulas/__init__.py +0 -0
  28. axis_synome-0.1.0.dev72/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
  29. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/.flake8 +0 -0
  30. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/AGENTS.md +0 -0
  31. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/CLAUDE.md +0 -0
  32. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/README.md +0 -0
  33. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/WRITING_SPECS.md +0 -0
  34. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/01_prime_basics.py +0 -0
  35. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/02_assets_and_tokens_of_a_prime.py +0 -0
  36. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/03_inverse_lookups.py +0 -0
  37. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/04_atlas_provenance.py +0 -0
  38. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/05_feeding_a_formula.py +0 -0
  39. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/examples/README.md +0 -0
  40. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/setup.cfg +0 -0
  41. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/__init__.py +0 -0
  42. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/export_entities.py +0 -0
  43. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/__init__.py +0 -0
  44. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/__main__.py +0 -0
  45. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/ast_normalizer.py +0 -0
  46. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/ast_utils.py +0 -0
  47. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/helpers.py +0 -0
  48. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/__init__.py +0 -0
  49. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/converter.py +0 -0
  50. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/latex/formatter.py +0 -0
  51. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/parse_expressions.py +0 -0
  52. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/parser/validation.py +0 -0
  53. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/__init__.py +0 -0
  54. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/all_entities/__init__.py +0 -0
  55. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
  56. {axis_synome-0.1.0.dev70/src/axis_synome/spec/crypto_lending → axis_synome-0.1.0.dev72/src/axis_synome/spec/asc}/__init__.py +0 -0
  57. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
  58. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/alm_proxies.py +0 -0
  59. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
  60. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/assets_missing_from_atlas.py +0 -0
  61. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/entities/types.py +0 -0
  62. {axis_synome-0.1.0.dev70/src/axis_synome/spec/crypto_lending → axis_synome-0.1.0.dev72/src/axis_synome/spec/asc}/formulas/__init__.py +0 -0
  63. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
  64. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
  65. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
  66. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
  67. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
  68. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
  69. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
  70. {axis_synome-0.1.0.dev70/src/axis_synome/spec/risk_capital/entities → axis_synome-0.1.0.dev72/src/axis_synome/spec/codegen_test}/__init__.py +0 -0
  71. {axis_synome-0.1.0.dev70/src/axis_synome/spec/risk_capital/formulas → axis_synome-0.1.0.dev72/src/axis_synome/spec/codegen_test/entities}/__init__.py +0 -0
  72. {axis_synome-0.1.0.dev70/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
  73. {axis_synome-0.1.0.dev70/src/axis_synome/spec_support → axis_synome-0.1.0.dev72/src/axis_synome/spec/crypto_lending/formulas}/__init__.py +0 -0
  74. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
  75. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/__init__.py +0 -0
  76. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/capital_types.py +0 -0
  77. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
  78. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/entities/risk_categories.py +0 -0
  79. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
  80. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
  81. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
  82. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/aggregate_rrc.py +0 -0
  83. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
  84. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/capital_composition.py +0 -0
  85. {axis_synome-0.1.0.dev70/src/axis_synome/spec_support/runtime → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/entities}/__init__.py +0 -0
  86. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
  87. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
  88. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/examples/risk_capital_walkthrough.ipynb +0 -0
  89. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
  90. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
  91. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
  92. {axis_synome-0.1.0.dev70/tests/axis_synome/parser → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/formulas}/__init__.py +0 -0
  93. {axis_synome-0.1.0.dev70/tests/axis_synome/risk_capital → axis_synome-0.1.0.dev72/src/axis_synome/spec/risk_capital/formulas/financial_rrc}/__init__.py +0 -0
  94. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
  95. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
  96. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
  97. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
  98. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
  99. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
  100. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
  101. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
  102. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
  103. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
  104. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/instance_rrc.py +0 -0
  105. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/jrc_loss_allocation.py +0 -0
  106. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
  107. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
  108. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
  109. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
  110. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/risk_capital/total_risk_capital.py +0 -0
  111. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/README.md +0 -0
  112. {axis_synome-0.1.0.dev70/tests/axis_synome/risk_capital/financial_rrc → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf}/__init__.py +0 -0
  113. {axis_synome-0.1.0.dev70/tests/axis_synome/risk_capital/formulas → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf/entities}/__init__.py +0 -0
  114. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
  115. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
  116. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
  117. {axis_synome-0.1.0.dev70/tests/axis_synome/risk_capital/smart_contract_rrc → axis_synome-0.1.0.dev72/src/axis_synome/spec/suraf/formulas}/__init__.py +0 -0
  118. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
  119. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
  120. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/__init__.py +0 -0
  121. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/__main__.py +0 -0
  122. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_inspect/cli.py +0 -0
  123. {axis_synome-0.1.0.dev70/tests/axis_synome/spec_inspect → axis_synome-0.1.0.dev72/src/axis_synome/spec_support}/__init__.py +0 -0
  124. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
  125. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/evm_address.py +0 -0
  126. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/math_protocol.py +0 -0
  127. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/pendle_validation.py +0 -0
  128. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/references/__init__.py +0 -0
  129. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/references/graph.py +0 -0
  130. {axis_synome-0.1.0.dev70/tests/axis_synome/spec_support → axis_synome-0.1.0.dev72/src/axis_synome/spec_support/runtime}/__init__.py +0 -0
  131. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/base.py +0 -0
  132. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/math.py +0 -0
  133. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/runtime/reference.py +0 -0
  134. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
  135. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_support/validated_str.py +0 -0
  136. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/__init__.py +0 -0
  137. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
  138. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/checker.py +0 -0
  139. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
  140. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome/spec_validator/python_subset.py +0 -0
  141. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/dependency_links.txt +0 -0
  142. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/entry_points.txt +0 -0
  143. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/requires.txt +0 -0
  144. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/src/axis_synome.egg-info/top_level.txt +0 -0
  145. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/__init__.py +0 -0
  146. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/conftest.py +0 -0
  147. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/mocks.py +0 -0
  148. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
  149. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc.py +0 -0
  150. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
  151. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
  152. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_asset_categories.py +0 -0
  153. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_dab.py +0 -0
  154. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_evm_address.py +0 -0
  155. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_latent_asc.py +0 -0
  156. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
  157. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
  158. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/asc/test_resting_asc.py +0 -0
  159. {axis_synome-0.1.0.dev70/tests/axis_synome/spec_support/references → axis_synome-0.1.0.dev72/tests/axis_synome/parser}/__init__.py +0 -0
  160. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_latex_chain.py +0 -0
  161. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_mixed_module.py +0 -0
  162. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/fixture_set_membership.py +0 -0
  163. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/graph_validator.py +0 -0
  164. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/__init__.py +0 -0
  165. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/test_formatter.py +0 -0
  166. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/latex/test_render.py +0 -0
  167. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_entity_parser.py +0 -0
  168. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_formula_extraction.py +0 -0
  169. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_helpers.py +0 -0
  170. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_parser.py +0 -0
  171. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/parser/test_set_membership.py +0 -0
  172. {axis_synome-0.1.0.dev70/tests/axis_synome/spec_support/runtime → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital}/__init__.py +0 -0
  173. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
  174. {axis_synome-0.1.0.dev70/tests/axis_synome/suraf → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/financial_rrc}/__init__.py +0 -0
  175. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
  176. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
  177. {axis_synome-0.1.0.dev70/tests/axis_synome/suraf/entities → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/formulas}/__init__.py +0 -0
  178. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
  179. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
  180. {axis_synome-0.1.0.dev70/tests/axis_synome/suraf/formulas → axis_synome-0.1.0.dev72/tests/axis_synome/risk_capital/smart_contract_rrc}/__init__.py +0 -0
  181. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
  182. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
  183. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_a321_a322_integration.py +0 -0
  184. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_aggregate_rrc.py +0 -0
  185. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_capital_composition.py +0 -0
  186. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_instance_rrc.py +0 -0
  187. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_jrc_loss_allocation.py +0 -0
  188. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/risk_capital/test_total_risk_capital.py +0 -0
  189. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/scripts/test_export_entities.py +0 -0
  190. {axis_synome-0.1.0.dev70/tests/axis_synome/suraf/suraf_client → axis_synome-0.1.0.dev72/tests/axis_synome/spec_inspect}/__init__.py +0 -0
  191. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_inspect/test_cli.py +0 -0
  192. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
  193. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
  194. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
  195. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
  196. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_checker.py +0 -0
  197. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
  198. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
  199. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
  200. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
  201. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
  202. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
  203. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
  204. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
  205. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
  206. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
  207. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
  208. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
  209. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/tests/axis_synome/test_examples.py +0 -0
  210. {axis_synome-0.1.0.dev70 → axis_synome-0.1.0.dev72}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev70
3
+ Version: 0.1.0.dev72
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -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.dev70'
22
- __version_tuple__ = version_tuple = (0, 1, 0, 'dev70')
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
@@ -288,6 +288,7 @@ def _run_case(case: ScalarCase) -> str | None:
288
288
 
289
289
 
290
290
  def main() -> int:
291
+ """Run the numeric fidelity gate for scalar formulas."""
291
292
  cases = _collect_scalar_formula_cases()
292
293
  failures: list[tuple[str, str]] = []
293
294
  for case in cases:
@@ -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
@@ -38,6 +38,8 @@ _processed_modules: set[str] = set()
38
38
 
39
39
 
40
40
  class FormulaCodegenMetadata(TypedDict):
41
+ """Metadata captured for generated formula code."""
42
+
41
43
  codegen_source_module: str | None
42
44
  codegen_source_symbol: str | None
43
45
  codegen_imports: list[str]
@@ -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}",
@@ -34,6 +34,7 @@ class FormulaPiece:
34
34
 
35
35
  @property
36
36
  def latex(self) -> str:
37
+ """Return the rendered equality as a single LaTeX string."""
37
38
  return f"{self.head} = {self.body}"
38
39
 
39
40
 
@@ -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
 
@@ -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
@@ -10,14 +10,28 @@ from axis_synome.spec_support.evm_address import EvmAddress
10
10
 
11
11
 
12
12
  class PrimeName(StrEnum):
13
+ """Canonical names of the Sky Star Agents (primes).
14
+
15
+ Each member's trailing docstring carries the ``:source_uuid:`` of that
16
+ Star's defining Atlas document (the children of A.6.1.1).
17
+ """
18
+
13
19
  GROVE = "Grove"
20
+ """:source_uuid: 727b0de6-095b-485e-bf9c-02108a364480"""
14
21
  KEEL = "Keel"
15
- LAUNCH_AGENT_6 = "Launch Agent 6"
22
+ """:source_uuid: bc6aed17-2969-4d04-9af6-c7bf3e4497e6"""
16
23
  LAUNCH_AGENT_7 = "Launch Agent 7"
24
+ """:source_uuid: d0d77316-0b08-447c-b75a-ae7926b07019"""
17
25
  OBEX = "Obex"
26
+ """:source_uuid: f558e673-cbab-4696-8ca1-3af9b90fe5d4"""
27
+ OSERO = "Osero"
28
+ """:source_uuid: eba0dcc7-e135-496f-b866-342deeb91dc4"""
18
29
  PATTERN = "Pattern"
30
+ """:source_uuid: dc083d10-74bc-43b6-ab2f-c91efce76e84"""
19
31
  SKYBASE = "Skybase"
32
+ """:source_uuid: c88439b5-f456-4e51-8825-42e0ba83546f"""
20
33
  SPARK = "Spark"
34
+ """:source_uuid: dee2f5a4-279a-488c-9a9d-9583e3216fbf"""
21
35
 
22
36
 
23
37
  # Grove positions whose non-obvious provenance is captured in a docstring. They
@@ -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"
@@ -90,9 +90,9 @@ class PrimeAgent(Enum):
90
90
  psm_protocols=set(),
91
91
  networks=set(),
92
92
  )
93
- LAUNCH_AGENT_6 = PrimeAgentData(
94
- name=PrimeName.LAUNCH_AGENT_6,
95
- assets=ASSETS_BY_PRIME.get(PrimeName.LAUNCH_AGENT_6, []),
93
+ OSERO = PrimeAgentData(
94
+ name=PrimeName.OSERO,
95
+ assets=ASSETS_BY_PRIME.get(PrimeName.OSERO, []),
96
96
  psm_protocols=set(),
97
97
  networks=set(),
98
98
  )
@@ -116,5 +116,5 @@ class EligiblePrimeAgentASC(Enum):
116
116
  GROVE = PrimeAgent.GROVE.value
117
117
  SKYBASE = PrimeAgent.SKYBASE.value
118
118
  PATTERN = PrimeAgent.PATTERN.value
119
- LAUNCH_AGENT_6 = PrimeAgent.LAUNCH_AGENT_6.value
119
+ OSERO = PrimeAgent.OSERO.value
120
120
  LAUNCH_AGENT_7 = PrimeAgent.LAUNCH_AGENT_7.value
@@ -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"
@@ -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)
@@ -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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev70
3
+ Version: 0.1.0.dev72
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -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