algorand-python-testing 0.6.0b1__tar.gz → 0.6.0b3__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 (308) hide show
  1. algorand_python_testing-0.6.0b3/.github/workflows/ci.yaml +77 -0
  2. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/CHANGELOG.md +14 -0
  3. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/PKG-INFO +2 -1
  4. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/pyproject.toml +25 -5
  5. algorand_python_testing-0.6.0b3/src/_algopy_testing/serialize.py +144 -0
  6. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/state/box.py +41 -1
  7. algorand_python_testing-0.6.0b3/src/_algopy_testing/utilities/size_of.py +9 -0
  8. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/utils.py +20 -2
  9. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_tuple.py +15 -0
  10. algorand_python_testing-0.6.0b3/tests/artifacts/Tuples/contract.py +11 -0
  11. algorand_python_testing-0.6.0b3/tests/artifacts/Tuples/data/TuplesContract.approval.teal +42 -0
  12. algorand_python_testing-0.6.0b3/tests/artifacts/Tuples/data/TuplesContract.arc32.json +50 -0
  13. algorand_python_testing-0.6.0b3/tests/artifacts/Tuples/data/TuplesContract.arc56.json +102 -0
  14. algorand_python_testing-0.6.0b3/tests/artifacts/Tuples/data/TuplesContract.clear.teal +7 -0
  15. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_box.py +139 -0
  16. algorand_python_testing-0.6.0b3/tests/value_generators/__init__.py +0 -0
  17. algorand_python_testing-0.6.0b1/.github/workflows/ci.yaml +0 -47
  18. algorand_python_testing-0.6.0b1/src/_algopy_testing/serialize.py +0 -158
  19. algorand_python_testing-0.6.0b1/src/_algopy_testing/utilities/size_of.py +0 -22
  20. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.coveragerc +0 -0
  21. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.editorconfig +0 -0
  22. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  23. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  24. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/dependabot.yml +0 -0
  25. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/pull_request_template.md +0 -0
  26. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/workflows/cd.yaml +0 -0
  27. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.github/workflows/gh-pages.yaml +0 -0
  28. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.gitignore +0 -0
  29. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.pre-commit-config.yaml +0 -0
  30. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.vscode/extensions.json +0 -0
  31. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.vscode/launch.json +0 -0
  32. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/.vscode/settings.json +0 -0
  33. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/CONTRIBUTING.md +0 -0
  34. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/LICENSE +0 -0
  35. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/README.md +0 -0
  36. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/Makefile +0 -0
  37. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/__init__.py +0 -0
  38. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/_static/custom.css +0 -0
  39. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/algopy.md +0 -0
  40. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/api.md +0 -0
  41. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/conf.py +0 -0
  42. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/coverage.md +0 -0
  43. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/examples.md +0 -0
  44. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/faq.md +0 -0
  45. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/index.md +0 -0
  46. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/make.bat +0 -0
  47. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/arc4-types.md +0 -0
  48. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/avm-types.md +0 -0
  49. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/concepts.md +0 -0
  50. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/contract-testing.md +0 -0
  51. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/index.md +0 -0
  52. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/opcodes.md +0 -0
  53. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/signature-testing.md +0 -0
  54. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/state-management.md +0 -0
  55. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/subroutines.md +0 -0
  56. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/docs/testing-guide/transactions.md +0 -0
  57. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/README.md +0 -0
  58. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/__init__.py +0 -0
  59. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/auction/__init__.py +0 -0
  60. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/auction/contract.py +0 -0
  61. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/auction/test_contract.py +0 -0
  62. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/htlc_logicsig/__init__.py +0 -0
  63. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/htlc_logicsig/signature.py +0 -0
  64. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/htlc_logicsig/test_signature.py +0 -0
  65. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/marketplace/__init__.py +0 -0
  66. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/marketplace/contract.py +0 -0
  67. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/marketplace/test_contract.py +0 -0
  68. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/proof_of_attendance/__init__.py +0 -0
  69. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/proof_of_attendance/contract.py +0 -0
  70. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/proof_of_attendance/test_contract.py +0 -0
  71. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/scratch_storage/__init__.py +0 -0
  72. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/scratch_storage/contract.py +0 -0
  73. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/scratch_storage/test_contract.py +0 -0
  74. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/simple_voting/__init__.py +0 -0
  75. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/simple_voting/contract.py +0 -0
  76. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/simple_voting/test_contract.py +0 -0
  77. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/zk_whitelist/__init__.py +0 -0
  78. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/zk_whitelist/contract.py +0 -0
  79. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/examples/zk_whitelist/test_contract.py +0 -0
  80. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/scripts/__init__.py +0 -0
  81. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/scripts/check_stubs_cov.py +0 -0
  82. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/scripts/refresh_test_artifacts.py +0 -0
  83. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/scripts/validate_examples.py +0 -0
  84. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/__init__.py +0 -0
  85. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/arc4.py +0 -0
  86. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/compiled.py +0 -0
  87. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/constants.py +0 -0
  88. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/context.py +0 -0
  89. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  90. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  91. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
  92. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
  93. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/decorators/__init__.py +0 -0
  94. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/decorators/arc4.py +0 -0
  95. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/decorators/subroutine.py +0 -0
  96. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/enums.py +0 -0
  97. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/gtxn.py +0 -0
  98. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/itxn.py +0 -0
  99. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/itxn_loader.py +0 -0
  100. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/__init__.py +0 -0
  101. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/account.py +0 -0
  102. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/application.py +0 -0
  103. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/asset.py +0 -0
  104. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/contract.py +0 -0
  105. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/logicsig.py +0 -0
  106. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/template_variable.py +0 -0
  107. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/txn_fields.py +0 -0
  108. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  109. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/mutable.py +0 -0
  110. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/__init__.py +0 -0
  111. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/block.py +0 -0
  112. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/constants.py +0 -0
  113. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/crypto.py +0 -0
  114. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/global_values.py +0 -0
  115. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/itxn.py +0 -0
  116. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/misc.py +0 -0
  117. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/pure.py +0 -0
  118. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/op/txn.py +0 -0
  119. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/__init__.py +0 -0
  120. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/array.py +0 -0
  121. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/biguint.py +0 -0
  122. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/bytes.py +0 -0
  123. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/string.py +0 -0
  124. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/primitives/uint64.py +0 -0
  125. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/protocols.py +0 -0
  126. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/py.typed +0 -0
  127. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/state/__init__.py +0 -0
  128. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/state/global_state.py +0 -0
  129. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/state/local_state.py +0 -0
  130. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/state/utils.py +0 -0
  131. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/utilities/__init__.py +0 -0
  132. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/utilities/budget.py +0 -0
  133. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/utilities/log.py +0 -0
  134. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/value_generators/__init__.py +0 -0
  135. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/value_generators/arc4.py +0 -0
  136. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/value_generators/avm.py +0 -0
  137. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/_algopy_testing/value_generators/txn.py +0 -0
  138. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/__init__.py +0 -0
  139. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/arc4.py +0 -0
  140. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/gtxn.py +0 -0
  141. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/itxn.py +0 -0
  142. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/op.py +0 -0
  143. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy/py.typed +0 -0
  144. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy_testing/__init__.py +0 -0
  145. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/src/algopy_testing/py.typed +0 -0
  146. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/templates/.macros.j2 +0 -0
  147. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/templates/.release_notes.md.j2 +0 -0
  148. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/templates/CHANGELOG.md.j2 +0 -0
  149. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/__init__.py +0 -0
  150. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/__init__.py +0 -0
  151. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/conftest.py +0 -0
  152. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_abi_call.py +0 -0
  153. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_address.py +0 -0
  154. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_arc4_method_signature.py +0 -0
  155. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_bool.py +0 -0
  156. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_dynamic_array.py +0 -0
  157. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_dynamic_bytes.py +0 -0
  158. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_emit.py +0 -0
  159. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_static_array.py +0 -0
  160. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_string.py +0 -0
  161. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_struct.py +0 -0
  162. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_ufixednxm.py +0 -0
  163. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/arc4/test_uintn.py +0 -0
  164. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  165. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  166. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
  167. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  168. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
  169. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  170. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  171. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
  172. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  173. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
  174. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  175. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  176. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -0
  177. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  178. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
  179. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/__init__.py +0 -0
  180. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/Contract.approval.teal +0 -0
  181. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
  182. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/Contract.clear.teal +0 -0
  183. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +0 -0
  184. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
  185. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +0 -0
  186. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +0 -0
  187. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
  188. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +0 -0
  189. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/immutable.py +0 -0
  190. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/static_size.py +0 -0
  191. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Arrays/uint64.py +0 -0
  192. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/BoxContract/__init__.py +0 -0
  193. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/BoxContract/contract.py +0 -0
  194. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
  195. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  196. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
  197. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Contains/__init__.py +0 -0
  198. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Contains/contract.py +0 -0
  199. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Contains/data/MyContract.approval.teal +0 -0
  200. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/Contains/data/MyContract.clear.teal +0 -0
  201. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
  202. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  203. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +0 -0
  204. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
  205. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +0 -0
  206. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +0 -0
  207. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
  208. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -0
  209. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  210. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CryptoOps/__init__.py +0 -0
  211. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CryptoOps/contract.py +0 -0
  212. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
  213. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  214. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
  215. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/GlobalStateValidator/__init__.py +0 -0
  216. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  217. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
  218. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  219. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
  220. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/MiscellaneousOps/__init__.py +0 -0
  221. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  222. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
  223. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  224. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
  225. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/PrimitiveOps/__init__.py +0 -0
  226. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  227. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
  228. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  229. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
  230. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/__init__.py +0 -0
  231. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  232. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  233. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  234. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +0 -0
  235. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
  236. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +0 -0
  237. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateMutations/statemutations.py +0 -0
  238. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/__init__.py +0 -0
  239. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/contract.py +0 -0
  240. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -0
  241. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
  242. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
  243. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +0 -0
  244. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
  245. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
  246. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -0
  247. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
  248. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
  249. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  250. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  251. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  252. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +0 -0
  253. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
  254. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
  255. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -0
  256. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
  257. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
  258. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -0
  259. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
  260. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
  261. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -0
  262. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
  263. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
  264. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -0
  265. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
  266. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
  267. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +0 -0
  268. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
  269. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
  270. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -0
  271. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
  272. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
  273. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +0 -0
  274. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
  275. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +0 -0
  276. {algorand_python_testing-0.6.0b1/tests/artifacts → algorand_python_testing-0.6.0b3/tests/artifacts/Tuples}/__init__.py +0 -0
  277. {algorand_python_testing-0.6.0b1/tests/contexts → algorand_python_testing-0.6.0b3/tests/artifacts}/__init__.py +0 -0
  278. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/common.py +0 -0
  279. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/conftest.py +0 -0
  280. {algorand_python_testing-0.6.0b1/tests/models → algorand_python_testing-0.6.0b3/tests/contexts}/__init__.py +0 -0
  281. {algorand_python_testing-0.6.0b1/tests/primitives → algorand_python_testing-0.6.0b3/tests/models}/__init__.py +0 -0
  282. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_asset.py +0 -0
  283. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_box_map.py +0 -0
  284. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_box_ref.py +0 -0
  285. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_contract.py +0 -0
  286. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_uenumerate.py +0 -0
  287. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/models/test_urange.py +0 -0
  288. {algorand_python_testing-0.6.0b1/tests/state → algorand_python_testing-0.6.0b3/tests/primitives}/__init__.py +0 -0
  289. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/primitives/conftest.py +0 -0
  290. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/primitives/test_biguint.py +0 -0
  291. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/primitives/test_bytes.py +0 -0
  292. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/primitives/test_string.py +0 -0
  293. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/primitives/test_uint64.py +0 -0
  294. {algorand_python_testing-0.6.0b1/tests/utilities → algorand_python_testing-0.6.0b3/tests/state}/__init__.py +0 -0
  295. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/state/conftest.py +0 -0
  296. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/state/test_global_state.py +0 -0
  297. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/state/test_local_state.py +0 -0
  298. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/state/test_mutations.py +0 -0
  299. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/test_array.py +0 -0
  300. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/test_context.py +0 -0
  301. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/test_miscellaneous_op.py +0 -0
  302. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/test_op.py +0 -0
  303. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/util.py +0 -0
  304. {algorand_python_testing-0.6.0b1/tests/value_generators → algorand_python_testing-0.6.0b3/tests/utilities}/__init__.py +0 -0
  305. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/utilities/conftest.py +0 -0
  306. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/utilities/test_log.py +0 -0
  307. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/utilities/test_size_of.py +0 -0
  308. {algorand_python_testing-0.6.0b1 → algorand_python_testing-0.6.0b3}/tests/value_generators/test_avm.py +0 -0
@@ -0,0 +1,77 @@
1
+ name: Check Python Code (algopy_testing)
2
+
3
+ on:
4
+ workflow_call:
5
+ pull_request:
6
+ schedule:
7
+ - cron: "0 8 * * 1" # Each monday 8 AM UTC
8
+
9
+ jobs:
10
+ check-python:
11
+ runs-on: "ubuntu-latest"
12
+ steps:
13
+ - name: Checkout source code
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Set up Python 3.12
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.12"
20
+ cache: "pip"
21
+
22
+ - name: Install hatch
23
+ run: pip install hatch
24
+
25
+ - name: Start LocalNet
26
+ run: pipx install algokit && algokit localnet start
27
+
28
+ - name: Check pre-commits
29
+ run: hatch run check
30
+
31
+ - name: Check pre-commits (examples)
32
+ run: hatch run examples:check
33
+
34
+ - name: Validate examples folder
35
+ run: hatch run validate_examples
36
+
37
+ - name: Check wheels can be built
38
+ run: hatch build
39
+
40
+ - name: Check doctests
41
+ run: hatch run docs:test
42
+
43
+ test-python-matrix:
44
+ runs-on: "ubuntu-latest"
45
+ strategy:
46
+ matrix:
47
+ python-version: ["3.12", "3.13"]
48
+ steps:
49
+ - name: Checkout source code
50
+ uses: actions/checkout@v4
51
+
52
+ - name: Set up Python ${{ matrix.python-version }}
53
+ uses: actions/setup-python@v5
54
+ with:
55
+ python-version: ${{ matrix.python-version }}
56
+ cache: "pip"
57
+
58
+ - name: Install hatch
59
+ run: pip install hatch
60
+
61
+ - name: Start LocalNet
62
+ run: pipx install algokit && algokit localnet start
63
+
64
+ - name: Run tests with Python ${{ matrix.python-version }}
65
+ run: hatch run test.py${{ matrix.python-version }}:ci
66
+
67
+ - name: Run examples tests with Python ${{ matrix.python-version }}
68
+ run: hatch run examples.py${{ matrix.python-version }}:tests
69
+
70
+ - name: Upload coverage artifacts
71
+ uses: actions/upload-artifact@v4
72
+ if: ${{ matrix.python-version == '3.13' }}
73
+ with:
74
+ name: coverage-reports
75
+ path: |
76
+ ./coverage.xml
77
+ retention-days: 14
@@ -1,4 +1,18 @@
1
1
  # CHANGELOG
2
+ ## v0.6.0-beta.3 (2025-05-16)
3
+
4
+ ### Bug fixes
5
+
6
+ * fixes type checking of tuples with primitive types ([`e971ad6`](https://github.com/algorandfoundation/algorand-python-testing/commit/e971ad6b125f269cd0874c09d58d8962f7622f8d))
7
+
8
+ Adds checks to ensure that type validation applies to classes only.
9
+
10
+ ## v0.6.0-beta.2 (2025-05-15)
11
+
12
+ ### Features
13
+
14
+ * add stubs for box create function ([`1fe6fe5`](https://github.com/algorandfoundation/algorand-python-testing/commit/1fe6fe55358630a6abea2f69406821cb6031a4d5))
15
+
2
16
  ## v0.6.0-beta.1 (2025-05-09)
3
17
 
4
18
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algorand-python-testing
3
- Version: 0.6.0b1
3
+ Version: 0.6.0b3
4
4
  Summary: Algorand Python testing library
5
5
  Project-URL: Documentation, https://github.com/algorandfoundation/puya/tree/main/algopy_testing#README.md
6
6
  Project-URL: Issues, https://github.com/algorandfoundation/puya/issues
@@ -12,6 +12,7 @@ Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
15
16
  Classifier: Topic :: Software Development :: Testing
16
17
  Requires-Python: >=3.12
17
18
  Requires-Dist: algorand-python>=2.0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "algorand-python-testing"
7
- version = "0.6.0-beta.1"
7
+ version = "0.6.0-beta.3"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -18,6 +18,7 @@ classifiers = [
18
18
  "Topic :: Software Development :: Testing",
19
19
  "Programming Language :: Python",
20
20
  "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
21
22
  ]
22
23
  dependencies = [
23
24
  # ==========================================================================
@@ -43,9 +44,6 @@ allow-direct-references = true
43
44
  [tool.hatch.build.targets.wheel]
44
45
  packages = ["src/algopy", 'src/algopy_testing', 'src/_algopy_testing']
45
46
 
46
- [[tool.hatch.envs.all.matrix]]
47
- python = ["3.12"]
48
-
49
47
  # default dev environment
50
48
  [tool.hatch.envs.default]
51
49
  type = "virtual"
@@ -121,9 +119,29 @@ path = ".venv.cicd"
121
119
  dependencies = [
122
120
  "python-semantic-release>=9.8.5",
123
121
  ]
122
+
124
123
  [tool.hatch.envs.cicd.scripts]
125
124
  clean_dist = "rm -rf dist"
126
125
 
126
+ # Testing environment with matrix
127
+ [tool.hatch.envs.test]
128
+ dependencies = [
129
+ "pytest>=7.4",
130
+ "pytest-mock>=3.10.0",
131
+ "pytest-xdist[psutil]>=3.3",
132
+ "pytest-cov>=4.1.0",
133
+ "py-algorand-sdk>=2.4.0",
134
+ "algokit-utils>=3.0.0",
135
+ "puyapy>=3.0",
136
+ ]
137
+
138
+ [tool.hatch.envs.test.scripts]
139
+ run = "pytest --cov=src --cov-report=xml {args}"
140
+ ci = "pytest --cov=src --cov-report=xml --cov-report=term"
141
+
142
+ [[tool.hatch.envs.test.matrix]]
143
+ python = ["3.12", "3.13"]
144
+
127
145
  # docs environment
128
146
  [tool.hatch.envs.docs]
129
147
  path = ".venv.docs"
@@ -159,7 +177,6 @@ dev = "hatch run docs:test && sphinx-autobuild docs docs/_build"
159
177
  [tool.hatch.envs.examples]
160
178
  type = "virtual"
161
179
  path = ".venv.examples"
162
- python = "3.12"
163
180
  dev-mode = true
164
181
  skip-install = false
165
182
  post-install-commands = [
@@ -188,6 +205,9 @@ check = [
188
205
  "hatch run mypy examples",
189
206
  ]
190
207
 
208
+ [[tool.hatch.envs.examples.matrix]]
209
+ python = ["3.12", "3.13"]
210
+
191
211
  # tool configurations
192
212
  [tool.black]
193
213
  line-length = 99
@@ -0,0 +1,144 @@
1
+ import dataclasses
2
+ import functools
3
+ import inspect
4
+ import typing
5
+ from collections.abc import Callable, Sequence
6
+
7
+ from _algopy_testing.primitives.uint64 import UInt64
8
+
9
+ if typing.TYPE_CHECKING:
10
+ from _algopy_testing.arc4 import _ABIEncoded
11
+
12
+
13
+ _T = typing.TypeVar("_T")
14
+ _U = typing.TypeVar("_U")
15
+
16
+
17
+ @dataclasses.dataclass(frozen=True)
18
+ class _Serializer(typing.Generic[_T, _U]):
19
+ arc4_type: type[_U]
20
+ native_to_arc4: Callable[[_T], _U]
21
+ arc4_to_native: Callable[[_U], _T]
22
+
23
+
24
+ def identity(i: _T) -> _T:
25
+ return i
26
+
27
+
28
+ def get_native_to_arc4_serializer(typ: type) -> _Serializer[typing.Any, typing.Any]:
29
+ from _algopy_testing import arc4
30
+ from _algopy_testing.primitives import ImmutableArray
31
+ from _algopy_testing.protocols import UInt64Backed
32
+
33
+ origin_type = typing.get_origin(typ)
34
+ if origin_type is tuple:
35
+ return _get_tuple_serializer(typing.get_args(typ))
36
+ elif isinstance(typ, type):
37
+ if issubclass(typ, arc4._ABIEncoded):
38
+ return _Serializer(arc4_type=typ, native_to_arc4=identity, arc4_to_native=identity)
39
+ for native_type, simple_arc4_type in _simple_native_to_arc4_type_map().items():
40
+ if issubclass(typ, native_type):
41
+ return _Serializer(
42
+ arc4_type=simple_arc4_type,
43
+ native_to_arc4=simple_arc4_type,
44
+ arc4_to_native=lambda n: n.native,
45
+ )
46
+ if issubclass(typ, UInt64Backed):
47
+ return _Serializer(
48
+ arc4_type=arc4.UInt64,
49
+ native_to_arc4=lambda n: arc4.UInt64(n.int_),
50
+ arc4_to_native=lambda a: typ.from_int(a.native),
51
+ )
52
+ if typing.NamedTuple in getattr(typ, "__orig_bases__", []):
53
+ tuple_fields = tuple(inspect.get_annotations(typ).values())
54
+ if any(isinstance(f, str) for f in tuple_fields):
55
+ raise TypeError("string annotations in typing.NamedTuple fields are not supported")
56
+ return _get_tuple_serializer(tuple_fields)
57
+ if issubclass(typ, ImmutableArray):
58
+ native_element_type = typ._element_type
59
+ element_serializer = get_native_to_arc4_serializer(native_element_type)
60
+ arc4_element_type = element_serializer.arc4_type
61
+ arc4_type = arc4.DynamicArray[arc4_element_type] # type: ignore[valid-type]
62
+ return _Serializer(
63
+ arc4_type=arc4_type,
64
+ native_to_arc4=lambda arr: arc4_type(
65
+ *(element_serializer.native_to_arc4(e) for e in arr)
66
+ ),
67
+ arc4_to_native=lambda arr: typ(
68
+ *(element_serializer.arc4_to_native(e) for e in arr)
69
+ ),
70
+ )
71
+ raise TypeError(f"unserializable type: {typ}")
72
+
73
+
74
+ @functools.cache
75
+ def _simple_native_to_arc4_type_map() -> dict[type, type]:
76
+ from _algopy_testing import arc4
77
+ from _algopy_testing.models import Account
78
+ from _algopy_testing.primitives import BigUInt, Bytes, String
79
+
80
+ return {
81
+ bool: arc4.Bool,
82
+ UInt64: arc4.UInt64,
83
+ BigUInt: arc4.UInt512,
84
+ Account: arc4.Address,
85
+ Bytes: arc4.DynamicBytes,
86
+ String: arc4.String,
87
+ }
88
+
89
+
90
+ def _get_tuple_serializer(item_types: tuple[type, ...]) -> _Serializer[typing.Any, typing.Any]:
91
+ from _algopy_testing import arc4
92
+
93
+ serializers = [get_native_to_arc4_serializer(i) for i in item_types]
94
+
95
+ def _items_to_arc4(items: Sequence[object]) -> tuple[object, ...]:
96
+ result = []
97
+ for item, serializer in zip(items, serializers, strict=True):
98
+ result.append(serializer.native_to_arc4(item))
99
+ return tuple(result)
100
+
101
+ def _items_to_native(items: Sequence[object]) -> tuple[object, ...]:
102
+ result = []
103
+ for item, serializer in zip(items, serializers, strict=True):
104
+ result.append(serializer.arc4_to_native(item))
105
+ return tuple(result)
106
+
107
+ return _Serializer(
108
+ arc4_type=arc4.Tuple[*(s.arc4_type for s in serializers)], # type: ignore[misc]
109
+ native_to_arc4=lambda t: arc4.Tuple(_items_to_arc4(t)),
110
+ arc4_to_native=lambda t: _items_to_native(t),
111
+ )
112
+
113
+
114
+ def serialize_to_bytes(value: object) -> bytes:
115
+ return native_to_arc4(value).bytes.value
116
+
117
+
118
+ def type_of(value: object) -> type:
119
+ """Returns the type of value, this will also ensure the type is fully parametrized
120
+ if it is a generic type."""
121
+ # get fully parametrized tuples
122
+ if isinstance(value, tuple) and type(value) is tuple:
123
+ return tuple[*(type_of(i) for i in value)] # type: ignore[misc, no-any-return]
124
+ else:
125
+ return type(value)
126
+
127
+
128
+ def native_to_arc4(value: object) -> "_ABIEncoded":
129
+ from _algopy_testing import arc4
130
+
131
+ src_type = type_of(value)
132
+
133
+ serializer = get_native_to_arc4_serializer(src_type)
134
+ arc4_value = serializer.native_to_arc4(value)
135
+ assert isinstance(arc4_value, arc4._ABIEncoded)
136
+ return arc4_value
137
+
138
+
139
+ def deserialize_from_bytes(typ: type[_T], bites: bytes) -> _T:
140
+ serializer = get_native_to_arc4_serializer(typ)
141
+ arc4_value = serializer.arc4_type.from_bytes(bites)
142
+ native_value = serializer.arc4_to_native(arc4_value)
143
+ assert isinstance(native_value, typ)
144
+ return native_value
@@ -1,13 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import typing
4
+ import warnings
4
5
 
5
6
  import _algopy_testing
6
7
  from _algopy_testing.constants import MAX_BOX_SIZE
7
8
  from _algopy_testing.context_helpers import lazy_context
8
9
  from _algopy_testing.mutable import set_attr_on_mutate, set_item_on_mutate
9
10
  from _algopy_testing.state.utils import cast_from_bytes, cast_to_bytes
10
- from _algopy_testing.utils import as_bytes, as_string
11
+ from _algopy_testing.utils import as_bytes, as_int64, as_string, get_static_size_of
11
12
 
12
13
  _TKey = typing.TypeVar("_TKey")
13
14
  _TValue = typing.TypeVar("_TValue")
@@ -38,6 +39,45 @@ class Box(typing.Generic[_TValue]):
38
39
  def __bool__(self) -> bool:
39
40
  return lazy_context.ledger.box_exists(self.app_id, self.key)
40
41
 
42
+ def create(self, *, size: algopy.UInt64 | int | None = None) -> bool:
43
+ missing_size_err_msg = (
44
+ f"{self._type} does not have a fixed byte size. Please specify a size argument"
45
+ )
46
+
47
+ size_arg = None if size is None else as_int64(size)
48
+ content_type_size = get_static_size_of(self._type)
49
+
50
+ if content_type_size is None and size_arg is None:
51
+ raise ValueError(missing_size_err_msg)
52
+ if content_type_size is not None and size_arg is not None:
53
+ if size_arg < content_type_size:
54
+ warnings.warn(
55
+ f"Box size should not be less than {content_type_size}",
56
+ stacklevel=2,
57
+ )
58
+
59
+ if size_arg > content_type_size:
60
+ warnings.warn(
61
+ f"Size is set to {size_arg} but {self._type} has a fixed size of {content_type_size}", # noqa: E501
62
+ stacklevel=2,
63
+ )
64
+
65
+ size_int = size_arg if size_arg is not None else content_type_size
66
+ assert size_int is not None, missing_size_err_msg
67
+
68
+ if size_int > MAX_BOX_SIZE:
69
+ raise ValueError(f"Box size cannot exceed {MAX_BOX_SIZE}")
70
+
71
+ box_exists = lazy_context.ledger.box_exists(self.app_id, self.key)
72
+ if box_exists:
73
+ if self.length == size_int:
74
+ return False
75
+ else:
76
+ raise ValueError(f"Box already exists with a different size: {self.length}")
77
+
78
+ lazy_context.ledger.set_box(self.app_id, self.key, b"\x00" * size_int)
79
+ return True
80
+
41
81
  @property
42
82
  def key(self) -> algopy.Bytes:
43
83
  if not self._key:
@@ -0,0 +1,9 @@
1
+ from _algopy_testing.primitives.uint64 import UInt64
2
+ from _algopy_testing.utils import get_static_size_of
3
+
4
+
5
+ def size_of(typ: type | object, /) -> UInt64:
6
+ size = get_static_size_of(typ)
7
+ if size is None:
8
+ raise ValueError(f"{typ} is dynamically sized")
9
+ return UInt64(size)
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import secrets
4
+ import types
4
5
  import typing
5
6
  from typing import TYPE_CHECKING
6
7
 
@@ -22,8 +23,6 @@ from _algopy_testing.constants import (
22
23
  )
23
24
 
24
25
  if TYPE_CHECKING:
25
- import types
26
-
27
26
  import algopy
28
27
 
29
28
  from _algopy_testing.op.global_values import GlobalFields
@@ -195,3 +194,22 @@ def raise_mocked_function_error(func_name: str) -> typing.Never:
195
194
  f"{func_name!r} is not available in test context. "
196
195
  "Mock using your preferred testing framework."
197
196
  )
197
+
198
+
199
+ def get_static_size_of(typ: type | object, /) -> int | None:
200
+ from _algopy_testing import UInt64
201
+ from _algopy_testing.arc4 import get_max_bytes_static_len
202
+ from _algopy_testing.serialize import get_native_to_arc4_serializer
203
+
204
+ if isinstance(typ, types.GenericAlias):
205
+ pass
206
+ elif not isinstance(typ, type):
207
+ typ = type(typ)
208
+
209
+ if typ is bool: # treat bool on its own as a uint64
210
+ typ = UInt64
211
+ serializer = get_native_to_arc4_serializer(typ) # type: ignore[arg-type]
212
+ type_info = serializer.arc4_type._type_info
213
+ size = get_max_bytes_static_len(type_info)
214
+
215
+ return size
@@ -2,8 +2,10 @@ import typing
2
2
 
3
3
  import pytest
4
4
  from _algopy_testing import arc4
5
+ from algopy_testing import AlgopyTestContext, algopy_testing_context
5
6
  from algosdk import abi
6
7
 
8
+ from tests.artifacts.Tuples.contract import TuplesContract
7
9
  from tests.util import int_to_bytes
8
10
 
9
11
  _abi_string = "hello"
@@ -15,6 +17,14 @@ _arc4_string = arc4.String("hello")
15
17
  _arc4_uint8 = arc4.UInt8(42)
16
18
  _arc4_bool = arc4.Bool(True)
17
19
 
20
+
21
+ # New fixture
22
+ @pytest.fixture()
23
+ def context() -> typing.Generator[AlgopyTestContext, None, None]:
24
+ with algopy_testing_context() as ctx:
25
+ yield ctx
26
+
27
+
18
28
  _test_data = [
19
29
  (
20
30
  abi.ABIType.from_string("(uint8,bool,bool)"),
@@ -279,3 +289,8 @@ def _compare_abi_and_arc4_values(
279
289
  assert arc4_value.native == abi_value
280
290
  else:
281
291
  assert arc4_value.bytes == int_to_bytes(abi_value, len(arc4_value.bytes))
292
+
293
+
294
+ def test_tuple_return_with_primitive_type(context: AlgopyTestContext) -> None: # noqa: ARG001
295
+ contract = TuplesContract()
296
+ contract.test_tuple_with_primitive_type()
@@ -0,0 +1,11 @@
1
+ from algopy import (
2
+ ARC4Contract,
3
+ UInt64,
4
+ arc4,
5
+ )
6
+
7
+
8
+ class TuplesContract(ARC4Contract, avm_version=11):
9
+ @arc4.abimethod()
10
+ def test_tuple_with_primitive_type(self) -> tuple[UInt64, bool]:
11
+ return (UInt64(0), True)
@@ -0,0 +1,42 @@
1
+ #pragma version 11
2
+ #pragma typetrack false
3
+
4
+ // algopy.arc4.ARC4Contract.approval_program() -> uint64:
5
+ main:
6
+ // tests/artifacts/Tuples/contract.py:8
7
+ // class TuplesContract(ARC4Contract, avm_version=11):
8
+ txn NumAppArgs
9
+ bz main_bare_routing@6
10
+ pushbytes 0x7229d79a // method "test_tuple_with_primitive_type()(uint64,bool)"
11
+ txna ApplicationArgs 0
12
+ match main_test_tuple_with_primitive_type_route@3
13
+
14
+ main_after_if_else@10:
15
+ // tests/artifacts/Tuples/contract.py:8
16
+ // class TuplesContract(ARC4Contract, avm_version=11):
17
+ pushint 0 // 0
18
+ return
19
+
20
+ main_test_tuple_with_primitive_type_route@3:
21
+ // tests/artifacts/Tuples/contract.py:9
22
+ // @arc4.abimethod()
23
+ txn OnCompletion
24
+ !
25
+ assert // OnCompletion is not NoOp
26
+ txn ApplicationID
27
+ assert // can only call when not creating
28
+ pushbytes 0x151f7c75000000000000000080
29
+ log
30
+ pushint 1 // 1
31
+ return
32
+
33
+ main_bare_routing@6:
34
+ // tests/artifacts/Tuples/contract.py:8
35
+ // class TuplesContract(ARC4Contract, avm_version=11):
36
+ txn OnCompletion
37
+ bnz main_after_if_else@10
38
+ txn ApplicationID
39
+ !
40
+ assert // can only call when creating
41
+ pushint 1 // 1
42
+ return
@@ -0,0 +1,50 @@
1
+ {
2
+ "hints": {
3
+ "test_tuple_with_primitive_type()(uint64,bool)": {
4
+ "call_config": {
5
+ "no_op": "CALL"
6
+ }
7
+ }
8
+ },
9
+ "source": {
10
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4NzIyOWQ3OWEgLy8gbWV0aG9kICJ0ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGUoKSh1aW50NjQsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3Rlc3RfdHVwbGVfd2l0aF9wcmltaXRpdmVfdHlwZV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvVHVwbGVzL2NvbnRyYWN0LnB5OjgKICAgIC8vIGNsYXNzIFR1cGxlc0NvbnRyYWN0KEFSQzRDb250cmFjdCwgYXZtX3ZlcnNpb249MTEpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl90ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwODAKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=",
11
+ "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"
12
+ },
13
+ "state": {
14
+ "global": {
15
+ "num_byte_slices": 0,
16
+ "num_uints": 0
17
+ },
18
+ "local": {
19
+ "num_byte_slices": 0,
20
+ "num_uints": 0
21
+ }
22
+ },
23
+ "schema": {
24
+ "global": {
25
+ "declared": {},
26
+ "reserved": {}
27
+ },
28
+ "local": {
29
+ "declared": {},
30
+ "reserved": {}
31
+ }
32
+ },
33
+ "contract": {
34
+ "name": "TuplesContract",
35
+ "methods": [
36
+ {
37
+ "name": "test_tuple_with_primitive_type",
38
+ "args": [],
39
+ "readonly": false,
40
+ "returns": {
41
+ "type": "(uint64,bool)"
42
+ }
43
+ }
44
+ ],
45
+ "networks": {}
46
+ },
47
+ "bare_call_config": {
48
+ "no_op": "CREATE"
49
+ }
50
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "TuplesContract",
3
+ "structs": {},
4
+ "methods": [
5
+ {
6
+ "name": "test_tuple_with_primitive_type",
7
+ "args": [],
8
+ "returns": {
9
+ "type": "(uint64,bool)"
10
+ },
11
+ "actions": {
12
+ "create": [],
13
+ "call": [
14
+ "NoOp"
15
+ ]
16
+ },
17
+ "readonly": false,
18
+ "events": [],
19
+ "recommendations": {}
20
+ }
21
+ ],
22
+ "arcs": [
23
+ 22,
24
+ 28
25
+ ],
26
+ "networks": {},
27
+ "state": {
28
+ "schema": {
29
+ "global": {
30
+ "ints": 0,
31
+ "bytes": 0
32
+ },
33
+ "local": {
34
+ "ints": 0,
35
+ "bytes": 0
36
+ }
37
+ },
38
+ "keys": {
39
+ "global": {},
40
+ "local": {},
41
+ "box": {}
42
+ },
43
+ "maps": {
44
+ "global": {},
45
+ "local": {},
46
+ "box": {}
47
+ }
48
+ },
49
+ "bareActions": {
50
+ "create": [
51
+ "NoOp"
52
+ ],
53
+ "call": []
54
+ },
55
+ "sourceInfo": {
56
+ "approval": {
57
+ "sourceInfo": [
58
+ {
59
+ "pc": [
60
+ 25
61
+ ],
62
+ "errorMessage": "OnCompletion is not NoOp"
63
+ },
64
+ {
65
+ "pc": [
66
+ 56
67
+ ],
68
+ "errorMessage": "can only call when creating"
69
+ },
70
+ {
71
+ "pc": [
72
+ 28
73
+ ],
74
+ "errorMessage": "can only call when not creating"
75
+ }
76
+ ],
77
+ "pcOffsetMethod": "none"
78
+ },
79
+ "clear": {
80
+ "sourceInfo": [],
81
+ "pcOffsetMethod": "none"
82
+ }
83
+ },
84
+ "source": {
85
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4NzIyOWQ3OWEgLy8gbWV0aG9kICJ0ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGUoKSh1aW50NjQsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3Rlc3RfdHVwbGVfd2l0aF9wcmltaXRpdmVfdHlwZV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvVHVwbGVzL2NvbnRyYWN0LnB5OjgKICAgIC8vIGNsYXNzIFR1cGxlc0NvbnRyYWN0KEFSQzRDb250cmFjdCwgYXZtX3ZlcnNpb249MTEpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl90ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwODAKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=",
86
+ "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"
87
+ },
88
+ "byteCode": {
89
+ "approval": "CzEbQQAqgARyKdeaNhoAjgEAA4EAQzEZFEQxGESADRUffHUAAAAAAAAAAICwgQFDMRlA/94xGBREgQFD",
90
+ "clear": "C4EBQw=="
91
+ },
92
+ "compilerInfo": {
93
+ "compiler": "puya",
94
+ "compilerVersion": {
95
+ "major": 4,
96
+ "minor": 8,
97
+ "patch": 1
98
+ }
99
+ },
100
+ "events": [],
101
+ "templateVariables": {}
102
+ }