axis-synome 0.1.0.dev58__tar.gz → 0.1.0.dev60__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 (145) hide show
  1. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/PKG-INFO +1 -1
  2. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/pyproject.toml +3 -0
  3. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/_version.py +2 -2
  4. axis_synome-0.1.0.dev60/src/axis_synome/export_entities.py +233 -0
  5. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/alm_proxies.py +7 -0
  6. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/networks.py +14 -0
  7. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/protocol_sets.py +29 -0
  8. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/PKG-INFO +1 -1
  9. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/SOURCES.txt +2 -0
  10. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/entry_points.txt +3 -0
  11. axis_synome-0.1.0.dev60/tests/axis_synome/scripts/test_export_entities.py +76 -0
  12. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/.flake8 +0 -0
  13. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/README.md +0 -0
  14. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/WRITING_SPECS.md +0 -0
  15. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/setup.cfg +0 -0
  16. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/__init__.py +0 -0
  17. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/__init__.py +0 -0
  18. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/all_entities/__init__.py +0 -0
  19. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/all_entities/lending_markets.py +0 -0
  20. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/README.md +0 -0
  21. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/__init__.py +0 -0
  22. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/asset_categories.py +0 -0
  23. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/assets.py +0 -0
  24. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/assets_by_prime.py +0 -0
  25. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/primes.py +0 -0
  26. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/tokens.py +0 -0
  27. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/entities/types.py +0 -0
  28. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/asc.py +0 -0
  29. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/asc_collateral_ratio.py +0 -0
  30. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/asc_incentive.py +0 -0
  31. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/dab.py +0 -0
  32. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/latent_asc.py +0 -0
  33. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/ratio_latent_asc.py +0 -0
  34. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/asc/formulas/resting_asc.py +0 -0
  35. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/codegen_test/entities/agents.py +0 -0
  36. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/crypto_lending/__init__.py +0 -0
  37. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/crypto_lending/formulas/__init__.py +0 -0
  38. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/crypto_lending/formulas/lif.py +0 -0
  39. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/entities/__init__.py +0 -0
  40. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/entities/audit_firms.py +0 -0
  41. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/entities/protocol_risk.py +0 -0
  42. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/entities/smart_contract_risk.py +0 -0
  43. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/__init__.py +0 -0
  44. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/administrative_rrc/__init__.py +0 -0
  45. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/administrative_rrc/administrative_risk.py +0 -0
  46. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/audit_factor.py +0 -0
  47. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/entities/__init__.py +0 -0
  48. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/entities/lending_protocol.py +0 -0
  49. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/entities/precomputed_crr.py +0 -0
  50. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/financial_rrc/__init__.py +0 -0
  51. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/financial_rrc/entities.py +0 -0
  52. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/financial_rrc/perpetual_positions.py +0 -0
  53. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/__init__.py +0 -0
  54. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/__init__.py +0 -0
  55. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/asset_correlation_coefficient.py +0 -0
  56. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/capital_requirement_without_buffers.py +0 -0
  57. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/exposure_caps.py +0 -0
  58. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/fixed_crr_rrc.py +0 -0
  59. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/instance_financial_rrc.py +0 -0
  60. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/lending_rrc.py +0 -0
  61. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/pipeline.py +0 -0
  62. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/precomputed_crr_rrc.py +0 -0
  63. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/financial_rrc/probability_of_default.py +0 -0
  64. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/formulas/required_risk_capital.py +0 -0
  65. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/lindy_factor.py +0 -0
  66. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/smart_contract_rrc/__init__.py +0 -0
  67. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/smart_contract_rrc/exceptions.py +0 -0
  68. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/risk_capital/smart_contract_rrc/smart_contract_risk.py +0 -0
  69. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/README.md +0 -0
  70. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/entities/assessor_score.py +0 -0
  71. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/entities/assets.py +0 -0
  72. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/entities/mappings.py +0 -0
  73. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/formulas/crr.py +0 -0
  74. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec/suraf/formulas/scoring.py +0 -0
  75. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/__init__.py +0 -0
  76. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/correlation_matrix.py +0 -0
  77. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/evm_address.py +0 -0
  78. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/math_protocol.py +0 -0
  79. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/pendle_validation.py +0 -0
  80. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/references/__init__.py +0 -0
  81. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/references/graph.py +0 -0
  82. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/runtime/__init__.py +0 -0
  83. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/runtime/base.py +0 -0
  84. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/runtime/math.py +0 -0
  85. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/runtime/reference.py +0 -0
  86. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/validated_dataclass.py +0 -0
  87. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_support/validated_str.py +0 -0
  88. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_validator/__init__.py +0 -0
  89. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_validator/check_source_uuids.py +0 -0
  90. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_validator/checker.py +0 -0
  91. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_validator/flake8_plugin.py +0 -0
  92. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome/spec_validator/python_subset.py +0 -0
  93. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/dependency_links.txt +0 -0
  94. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/requires.txt +0 -0
  95. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/src/axis_synome.egg-info/top_level.txt +0 -0
  96. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/__init__.py +0 -0
  97. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/conftest.py +0 -0
  98. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/mocks.py +0 -0
  99. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_alm_proxies.py +0 -0
  100. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_asc.py +0 -0
  101. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_asc_collateral_ratio.py +0 -0
  102. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_asc_incentive.py +0 -0
  103. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_asset_categories.py +0 -0
  104. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_dab.py +0 -0
  105. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_evm_address.py +0 -0
  106. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_latent_asc.py +0 -0
  107. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_prime_agent_data_validation.py +0 -0
  108. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_ratio_latent_asc.py +0 -0
  109. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/asc/test_resting_asc.py +0 -0
  110. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/__init__.py +0 -0
  111. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/administrative_rrc/test_administrative_risk.py +0 -0
  112. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/financial_rrc/__init__.py +0 -0
  113. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/financial_rrc/test_lending_rrc.py +0 -0
  114. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/financial_rrc/test_perpetual_positions.py +0 -0
  115. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/formulas/__init__.py +0 -0
  116. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/formulas/test_correlation_matrix.py +0 -0
  117. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/formulas/test_loss_given_default.py +0 -0
  118. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/smart_contract_rrc/__init__.py +0 -0
  119. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py +0 -0
  120. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py +0 -0
  121. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/__init__.py +0 -0
  122. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/references/__init__.py +0 -0
  123. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/references/test_graph.py +0 -0
  124. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/runtime/__init__.py +0 -0
  125. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/runtime/test_base.py +0 -0
  126. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_support/runtime/test_math.py +0 -0
  127. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_validator/test_check_source_uuids.py +0 -0
  128. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_validator/test_checker.py +0 -0
  129. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/spec_validator/test_flake8_plugin.py +0 -0
  130. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/__init__.py +0 -0
  131. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/entities/__init__.py +0 -0
  132. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/entities/test_assessor_score.py +0 -0
  133. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/formulas/__init__.py +0 -0
  134. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/formulas/test_crr.py +0 -0
  135. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/formulas/test_scoring.py +0 -0
  136. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/crr_mapping.csv +0 -0
  137. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/penalty.csv +0 -0
  138. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_1_scores.csv +0 -0
  139. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_2_scores.csv +0 -0
  140. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/scorecards/Assessor_3_scores.csv +0 -0
  141. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/static/aave_ausdc/v1/weights.csv +0 -0
  142. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/suraf_client/__init__.py +0 -0
  143. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/suraf_client/suraf_client.py +0 -0
  144. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/tests/axis_synome/suraf/suraf_client/test_suraf_client.py +0 -0
  145. {axis_synome-0.1.0.dev58 → axis_synome-0.1.0.dev60}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev58
3
+ Version: 0.1.0.dev60
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -24,6 +24,9 @@ runtime = [
24
24
  Repository = "https://github.com/archon-research/next-gen-atlas"
25
25
  Documentation = "https://github.com/archon-research/next-gen-atlas"
26
26
 
27
+ [project.scripts]
28
+ export_entities = "axis_synome.export_entities:main"
29
+
27
30
  [project.entry-points."flake8.extension"]
28
31
  AXS = "axis_synome.spec_validator.flake8_plugin:SpecSubsetChecker"
29
32
 
@@ -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.dev58'
22
- __version_tuple__ = version_tuple = (0, 1, 0, 'dev58')
21
+ __version__ = version = '0.1.0.dev60'
22
+ __version_tuple__ = version_tuple = (0, 1, 0, 'dev60')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,233 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import importlib.metadata
5
+ import json
6
+ import re
7
+ import subprocess
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ from pydantic import BaseModel, ConfigDict
12
+
13
+ from axis_synome.spec.asc.entities.alm_proxies import (
14
+ STL_ALM_PROXY_ADDRESS_OVERRIDES,
15
+ AlmProxy,
16
+ )
17
+ from axis_synome.spec.asc.entities.assets_by_prime import ASSETS_BY_PRIME, PrimeName
18
+ from axis_synome.spec.asc.entities.networks import STL_CHAIN_BY_NETWORK
19
+ from axis_synome.spec.asc.entities.protocol_sets import (
20
+ ATOKEN_PROTOCOLS,
21
+ ERC4626_PROTOCOLS,
22
+ L1_PSM_PROTOCOLS,
23
+ L2_PSM_PROTOCOLS,
24
+ UNISWAP_STYLE_PROTOCOLS,
25
+ Protocol,
26
+ )
27
+
28
+
29
+ class AxisSynomeContract(BaseModel):
30
+ model_config = ConfigDict(extra="forbid")
31
+
32
+ version: str
33
+ axis_synome_git_commit: str
34
+ axis_synome: dict[str, Any]
35
+
36
+
37
+ def _slug(text: str) -> str:
38
+ return re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
39
+
40
+
41
+ def _prime_to_star(prime: PrimeName | str) -> str:
42
+ text = prime.value if isinstance(prime, PrimeName) else str(prime)
43
+ return text.lower().replace(" ", "-")
44
+
45
+
46
+ def _token_type(protocol: Protocol, chain: str, token_name: str) -> str:
47
+ if protocol in ATOKEN_PROTOCOLS:
48
+ return "atoken"
49
+
50
+ if protocol in ERC4626_PROTOCOLS:
51
+ return "erc4626"
52
+
53
+ if protocol == Protocol.CURVE:
54
+ return "curve"
55
+
56
+ if protocol in UNISWAP_STYLE_PROTOCOLS:
57
+ if "LP" in token_name.upper():
58
+ return "uni_v3_lp"
59
+ return "uni_v3_pool"
60
+
61
+ if protocol == Protocol.CENTRIFUGE:
62
+ if chain == "plume":
63
+ return "centrifuge_feeder"
64
+ return "centrifuge"
65
+
66
+ if protocol == Protocol.ANCHORAGE:
67
+ return "anchorage"
68
+
69
+ if protocol in L1_PSM_PROTOCOLS | L2_PSM_PROTOCOLS:
70
+ return "psm3"
71
+
72
+ return "erc20"
73
+
74
+
75
+ def _allocation_type(protocol: Protocol) -> str:
76
+ if protocol in L1_PSM_PROTOCOLS | L2_PSM_PROTOCOLS:
77
+ return "psm3"
78
+ return "allocation"
79
+
80
+
81
+ def _version_from_package_metadata() -> str:
82
+ return importlib.metadata.version("axis-synome")
83
+
84
+
85
+ def _axis_synome_git_commit() -> str:
86
+ repo_root = Path(__file__).resolve().parents[2]
87
+ try:
88
+ return subprocess.check_output(
89
+ ["git", "rev-parse", "HEAD"], cwd=repo_root, text=True
90
+ ).strip()
91
+ except (subprocess.CalledProcessError, FileNotFoundError):
92
+ return "unknown"
93
+
94
+
95
+ def build_axis_synome_contract(
96
+ version: str | None = None,
97
+ axis_synome_git_commit: str | None = None,
98
+ ) -> AxisSynomeContract:
99
+ proxy_lookup: dict[tuple[str, str], str] = {}
100
+
101
+ for member in AlmProxy:
102
+ deployment = member.value
103
+ chain = STL_CHAIN_BY_NETWORK.get(deployment.network)
104
+ if chain is None:
105
+ continue
106
+
107
+ star = _prime_to_star(deployment.prime.name)
108
+ proxy_lookup[(star, chain)] = str(deployment.address).lower()
109
+
110
+ for (prime, network), address in STL_ALM_PROXY_ADDRESS_OVERRIDES.items():
111
+ chain = STL_CHAIN_BY_NETWORK.get(network)
112
+ if chain is None:
113
+ continue
114
+
115
+ star = _prime_to_star(prime.name)
116
+ # Explicit overrides for STL compatibility when these keys already exist.
117
+ proxy_lookup[(star, chain)] = str(address).lower()
118
+
119
+ entries: list[dict[str, Any]] = []
120
+ for prime_name, assets in ASSETS_BY_PRIME.items():
121
+ star = _prime_to_star(prime_name)
122
+ if star not in {"spark", "grove"}:
123
+ continue
124
+
125
+ for asset in assets:
126
+ chain = STL_CHAIN_BY_NETWORK.get(asset.network)
127
+ if chain is None:
128
+ continue
129
+
130
+ wallet = proxy_lookup.get((star, chain))
131
+ if wallet is None:
132
+ continue
133
+
134
+ entries.append({
135
+ "contract_address": str(asset.address).lower(),
136
+ "wallet_address": wallet,
137
+ "asset_address": str(asset.underlying_asset_address).lower(),
138
+ "star": star,
139
+ "chain": chain,
140
+ "protocol": _slug(asset.protocol.value),
141
+ "allocation_type": _allocation_type(asset.protocol),
142
+ "token_type": _token_type(asset.protocol, chain, asset.token.value),
143
+ "created_at_block": None,
144
+ })
145
+
146
+ assets_by_prime_export: dict[str, list[dict[str, Any]]] = {}
147
+ for entry in entries:
148
+ assets_by_prime_export.setdefault(entry["star"], []).append(entry)
149
+
150
+ alm_proxy_export: dict[str, dict[str, dict[str, str]]] = {}
151
+ for (star, chain), address in proxy_lookup.items():
152
+ alm_proxy_export.setdefault(star, {})[chain] = {
153
+ "star": star,
154
+ "chain": chain,
155
+ "address": address,
156
+ }
157
+
158
+ return AxisSynomeContract(
159
+ version=version or _version_from_package_metadata(),
160
+ axis_synome_git_commit=axis_synome_git_commit or _axis_synome_git_commit(),
161
+ axis_synome={
162
+ "spec": {
163
+ "asc": {
164
+ "entities": {
165
+ "assets_by_prime": {"ASSETS_BY_PRIME": assets_by_prime_export},
166
+ "alm_proxies": {"AlmProxy": alm_proxy_export},
167
+ }
168
+ }
169
+ }
170
+ },
171
+ )
172
+
173
+
174
+ def export_axis_synome_contract(
175
+ data_path: Path,
176
+ schema_path: Path,
177
+ version: str | None,
178
+ axis_synome_git_commit: str | None,
179
+ ) -> None:
180
+ config = build_axis_synome_contract(
181
+ version=version,
182
+ axis_synome_git_commit=axis_synome_git_commit,
183
+ )
184
+
185
+ data_path.parent.mkdir(parents=True, exist_ok=True)
186
+ schema_path.parent.mkdir(parents=True, exist_ok=True)
187
+
188
+ data_path.write_text(config.model_dump_json(indent=2), encoding="utf-8")
189
+
190
+ schema = AxisSynomeContract.model_json_schema()
191
+ schema_path.write_text(json.dumps(schema, indent=2), encoding="utf-8")
192
+
193
+
194
+ def main() -> None:
195
+ parser = argparse.ArgumentParser(
196
+ description="Export axis-synome entities contract JSON and pydantic schema."
197
+ )
198
+ parser.add_argument(
199
+ "--out",
200
+ type=Path,
201
+ default=Path("generated/stl/axis_synome_entities.json"),
202
+ help="Output JSON data path",
203
+ )
204
+ parser.add_argument(
205
+ "--schema-out",
206
+ type=Path,
207
+ default=Path("generated/stl/axis_synome_entities.schema.json"),
208
+ help="Output JSON schema path",
209
+ )
210
+ parser.add_argument(
211
+ "--version",
212
+ type=str,
213
+ default=None,
214
+ help="Version string embedded in exported config (default resolves from pyproject metadata)",
215
+ )
216
+ parser.add_argument(
217
+ "--git-commit",
218
+ type=str,
219
+ default=None,
220
+ help="axis-synome git commit hash embedded in exported config (default resolves from git)",
221
+ )
222
+
223
+ args = parser.parse_args()
224
+ export_axis_synome_contract(
225
+ args.out,
226
+ args.schema_out,
227
+ version=args.version,
228
+ axis_synome_git_commit=args.git_commit,
229
+ )
230
+
231
+
232
+ if __name__ == "__main__":
233
+ main()
@@ -207,3 +207,10 @@ class AlmProxy(Enum):
207
207
  GROVE_PLASMA = GROVE_PLASMA_ALM_PROXY
208
208
  GROVE_PLUME = GROVE_PLUME_ALM_PROXY
209
209
  GROVE_MONAD = GROVE_MONAD_ALM_PROXY
210
+
211
+
212
+ # Temporary STL compatibility overrides while tracker config migrates.
213
+ STL_ALM_PROXY_ADDRESS_OVERRIDES: Final[dict[tuple[PrimeAgent, Network], str]] = {
214
+ (PrimeAgent.SPARK, Network.ETHEREUM_MAINNET): "0x3300f198988e4c9c63f75df86de36421f06af8c4",
215
+ (PrimeAgent.GROVE, Network.ETHEREUM_MAINNET): "0x1369f7b2b38c76b6478c0f0e66d94923421891ba",
216
+ }
@@ -15,3 +15,17 @@ class Network(Enum):
15
15
 
16
16
  # L2 networks: all networks that are not Ethereum mainnet.
17
17
  L2_NETWORKS = {Network.BASE, Network.ARBITRUM, Network.OPTIMISM, Network.UNICHAIN}
18
+
19
+
20
+ # Chain labels consumed by STL compatibility checks.
21
+ STL_CHAIN_BY_NETWORK = {
22
+ Network.ETHEREUM_MAINNET: "mainnet",
23
+ Network.BASE: "base",
24
+ Network.ARBITRUM: "arbitrum",
25
+ Network.OPTIMISM: "optimism",
26
+ Network.UNICHAIN: "unichain",
27
+ Network.AVALANCHE: "avalanche-c",
28
+ Network.PLASMA: "plasma",
29
+ Network.PLUME: "plume",
30
+ Network.MONAD: "monad",
31
+ }
@@ -80,3 +80,32 @@ POOL_PROTOCOLS = {Protocol.CURVE, Protocol.UNISWAP}
80
80
  GUNI_PROTOCOLS = {Protocol.GUNI}
81
81
 
82
82
  GUNI_RESTING_FEE_TIERS = {0.0001, 0.0005}
83
+
84
+
85
+ # STL exporter protocol classifications.
86
+ ATOKEN_PROTOCOLS = {
87
+ Protocol.AAVE,
88
+ Protocol.AAVE_V2,
89
+ Protocol.AAVE_V3,
90
+ Protocol.AAVE_CORE,
91
+ Protocol.AAVE_CORE_V3,
92
+ Protocol.AAVE_PRIME,
93
+ Protocol.AAVE_HORIZON,
94
+ Protocol.SPARKLEND,
95
+ Protocol.SPARKLEND_PROTOCOL,
96
+ }
97
+
98
+ ERC4626_PROTOCOLS = {
99
+ Protocol.MORPHO,
100
+ Protocol.MORPHO_BLUE_ERC4626_VAULT,
101
+ Protocol.MAPLE,
102
+ Protocol.FLUID,
103
+ Protocol.FLUID_FINANCE_ERC4626_VAULT,
104
+ Protocol.SPARK_SAVINGS_PROTOCOL,
105
+ Protocol.STEAKHOUSE_PYUSD_MORPHO_VAULT,
106
+ Protocol.GROVE_STEAKHOUSE_AUSD_MORPHO_VAULT,
107
+ Protocol.GROVE_STEAKHOUSE_USDC_HIGH_YIELD_VAULT_V2,
108
+ Protocol.ARKIS,
109
+ }
110
+
111
+ UNISWAP_STYLE_PROTOCOLS = {Protocol.UNISWAP, Protocol.UNISWAP_V3, Protocol.GUNI}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: axis-synome
3
- Version: 0.1.0.dev58
3
+ Version: 0.1.0.dev60
4
4
  Summary: Axis specification modules (entities, formulas, validators)
5
5
  Author-email: Archon Tech <hello@archontech.ai>
6
6
  License: MIT
@@ -5,6 +5,7 @@ pyproject.toml
5
5
  uv.lock
6
6
  src/axis_synome/__init__.py
7
7
  src/axis_synome/_version.py
8
+ src/axis_synome/export_entities.py
8
9
  src/axis_synome.egg-info/PKG-INFO
9
10
  src/axis_synome.egg-info/SOURCES.txt
10
11
  src/axis_synome.egg-info/dependency_links.txt
@@ -115,6 +116,7 @@ tests/axis_synome/risk_capital/formulas/test_loss_given_default.py
115
116
  tests/axis_synome/risk_capital/smart_contract_rrc/__init__.py
116
117
  tests/axis_synome/risk_capital/smart_contract_rrc/test_exceptions.py
117
118
  tests/axis_synome/risk_capital/smart_contract_rrc/test_smart_contract_risk.py
119
+ tests/axis_synome/scripts/test_export_entities.py
118
120
  tests/axis_synome/spec_support/__init__.py
119
121
  tests/axis_synome/spec_support/references/__init__.py
120
122
  tests/axis_synome/spec_support/references/test_graph.py
@@ -1,2 +1,5 @@
1
+ [console_scripts]
2
+ export_entities = axis_synome.export_entities:main
3
+
1
4
  [flake8.extension]
2
5
  AXS = axis_synome.spec_validator.flake8_plugin:SpecSubsetChecker
@@ -0,0 +1,76 @@
1
+ import json
2
+ import subprocess
3
+ import sys
4
+ from pathlib import Path
5
+
6
+
7
+ def _run_export(repo_root: Path, out_path: Path, schema_path: Path) -> None:
8
+ subprocess.run(
9
+ [
10
+ sys.executable,
11
+ "-m",
12
+ "axis_synome.export_entities",
13
+ "--out",
14
+ str(out_path),
15
+ "--schema-out",
16
+ str(schema_path),
17
+ "--version",
18
+ "test-version",
19
+ "--git-commit",
20
+ "test-commit",
21
+ ],
22
+ check=True,
23
+ cwd=repo_root / "axis-synome",
24
+ )
25
+
26
+
27
+ def test_export_entities_outputs_contract_and_schema(tmp_path: Path):
28
+ repo_root = Path(__file__).resolve().parents[4]
29
+ out_path = tmp_path / "axis_synome_entities.json"
30
+ schema_path = tmp_path / "axis_synome_entities.schema.json"
31
+
32
+ _run_export(repo_root, out_path, schema_path)
33
+
34
+ contract = json.loads(out_path.read_text(encoding="utf-8"))
35
+ schema = json.loads(schema_path.read_text(encoding="utf-8"))
36
+
37
+ assert contract["version"] == "test-version"
38
+ assert contract["axis_synome_git_commit"] == "test-commit"
39
+ assert schema["title"] == "AxisSynomeContract"
40
+
41
+
42
+ def test_export_entities_applies_extra_proxy_overrides(tmp_path: Path):
43
+ repo_root = Path(__file__).resolve().parents[4]
44
+ out_path = tmp_path / "axis_synome_entities.json"
45
+ schema_path = tmp_path / "axis_synome_entities.schema.json"
46
+
47
+ _run_export(repo_root, out_path, schema_path)
48
+
49
+ contract = json.loads(out_path.read_text(encoding="utf-8"))
50
+ entities = contract["axis_synome"]["spec"]["asc"]["entities"]
51
+ proxies = entities["alm_proxies"]["AlmProxy"]
52
+
53
+ assert proxies["spark"]["mainnet"]["address"] == "0x3300f198988e4c9c63f75df86de36421f06af8c4"
54
+ assert proxies["grove"]["mainnet"]["address"] == "0x1369f7b2b38c76b6478c0f0e66d94923421891ba"
55
+
56
+ spark_mainnet_entries = [
57
+ entry
58
+ for entry in entities["assets_by_prime"]["ASSETS_BY_PRIME"]["spark"]
59
+ if entry["chain"] == "mainnet"
60
+ ]
61
+ grove_mainnet_entries = [
62
+ entry
63
+ for entry in entities["assets_by_prime"]["ASSETS_BY_PRIME"]["grove"]
64
+ if entry["chain"] == "mainnet"
65
+ ]
66
+
67
+ assert spark_mainnet_entries
68
+ assert grove_mainnet_entries
69
+ assert all(
70
+ entry["wallet_address"] == "0x3300f198988e4c9c63f75df86de36421f06af8c4"
71
+ for entry in spark_mainnet_entries
72
+ )
73
+ assert all(
74
+ entry["wallet_address"] == "0x1369f7b2b38c76b6478c0f0e66d94923421891ba"
75
+ for entry in grove_mainnet_entries
76
+ )