algorand-python-testing 1.2.0b1__tar.gz → 1.2.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 (363) hide show
  1. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/CHANGELOG.md +12 -0
  2. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/PKG-INFO +1 -1
  3. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/coverage.md +2 -0
  4. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/index.md +4 -4
  5. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/concepts.md +2 -2
  6. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/contract-testing.md +5 -5
  7. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/subroutines.md +3 -1
  8. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/transactions.md +71 -2
  9. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/contract.py +0 -3
  10. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/contract.py +13 -13
  11. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/contract.py +0 -4
  12. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/pyproject.toml +1 -1
  13. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/__init__.py +5 -0
  14. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/txn_context.py +4 -4
  15. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/itxn.py +11 -0
  16. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/__init__.py +5 -0
  17. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_abi_call.py +2 -2
  18. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +45 -45
  19. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +1 -1
  20. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/static_size.py +0 -1
  21. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/contract.py +0 -5
  22. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/data/MyContract.approval.teal +12 -15
  23. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/contract.py +63 -0
  24. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.approval.teal +284 -0
  25. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.arc56.json +161 -0
  26. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.approval.teal +66 -0
  27. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.arc56.json +90 -0
  28. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/verifier.py +16 -0
  29. algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +7 -0
  30. algorand_python_testing-1.2.0b3/tests/artifacts/Tuples/data/TuplesContract.clear.teal +7 -0
  31. algorand_python_testing-1.2.0b3/tests/dynamic_itxn_group/test_dynamic_itxn_group.py +67 -0
  32. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_contract.py +1 -3
  33. algorand_python_testing-1.2.0b3/tests/utilities/__init__.py +0 -0
  34. algorand_python_testing-1.2.0b3/tests/value_generators/__init__.py +0 -0
  35. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.coveragerc +0 -0
  36. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.editorconfig +0 -0
  37. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  38. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  39. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/dependabot.yml +0 -0
  40. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/pull_request_template.md +0 -0
  41. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/cd.yaml +0 -0
  42. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/ci.yaml +0 -0
  43. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.github/workflows/gh-pages.yaml +0 -0
  44. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.gitignore +0 -0
  45. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.pre-commit-config.yaml +0 -0
  46. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/extensions.json +0 -0
  47. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/launch.json +0 -0
  48. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/.vscode/settings.json +0 -0
  49. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/CONTRIBUTING.md +0 -0
  50. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/LICENSE +0 -0
  51. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/README.md +0 -0
  52. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/Makefile +0 -0
  53. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/__init__.py +0 -0
  54. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/_static/custom.css +0 -0
  55. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/algopy.md +0 -0
  56. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/api.md +0 -0
  57. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/conf.py +0 -0
  58. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/examples.md +0 -0
  59. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/faq.md +0 -0
  60. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/make.bat +0 -0
  61. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/arc4-types.md +0 -0
  62. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/avm-types.md +0 -0
  63. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/index.md +0 -0
  64. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/opcodes.md +0 -0
  65. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/signature-testing.md +0 -0
  66. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/docs/testing-guide/state-management.md +0 -0
  67. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/README.md +0 -0
  68. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/__init__.py +0 -0
  69. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/__init__.py +0 -0
  70. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/contract.py +0 -0
  71. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/auction/test_contract.py +0 -0
  72. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/__init__.py +0 -0
  73. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/signature.py +0 -0
  74. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/htlc_logicsig/test_signature.py +0 -0
  75. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/__init__.py +0 -0
  76. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/marketplace/test_contract.py +0 -0
  77. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/__init__.py +0 -0
  78. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/proof_of_attendance/test_contract.py +0 -0
  79. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/__init__.py +0 -0
  80. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/contract.py +0 -0
  81. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/scratch_storage/test_contract.py +0 -0
  82. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/__init__.py +0 -0
  83. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/simple_voting/test_contract.py +0 -0
  84. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/__init__.py +0 -0
  85. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/contract.py +0 -0
  86. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/examples/zk_whitelist/test_contract.py +0 -0
  87. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/__init__.py +0 -0
  88. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/check_stubs_cov.py +0 -0
  89. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/refresh_test_artifacts.py +0 -0
  90. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/scripts/validate_examples.py +0 -0
  91. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/arc4.py +0 -0
  92. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/compiled.py +0 -0
  93. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/constants.py +0 -0
  94. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context.py +0 -0
  95. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  96. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  97. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
  98. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/__init__.py +0 -0
  99. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/arc4.py +0 -0
  100. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/decorators/subroutine.py +0 -0
  101. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/enums.py +0 -0
  102. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/gtxn.py +0 -0
  103. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/itxn_loader.py +0 -0
  104. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/__init__.py +0 -0
  105. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/account.py +0 -0
  106. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/application.py +0 -0
  107. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/asset.py +0 -0
  108. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/contract.py +0 -0
  109. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/logicsig.py +0 -0
  110. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/template_variable.py +0 -0
  111. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/txn_fields.py +0 -0
  112. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  113. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/mutable.py +0 -0
  114. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/__init__.py +0 -0
  115. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/block.py +0 -0
  116. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/constants.py +0 -0
  117. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/crypto.py +0 -0
  118. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/global_values.py +0 -0
  119. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/itxn.py +0 -0
  120. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/misc.py +0 -0
  121. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/pure.py +0 -0
  122. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/op/txn.py +0 -0
  123. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/__init__.py +0 -0
  124. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/array.py +0 -0
  125. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/biguint.py +0 -0
  126. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/bytes.py +0 -0
  127. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/fixed_bytes.py +0 -0
  128. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/string.py +0 -0
  129. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/primitives/uint64.py +0 -0
  130. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/protocols.py +0 -0
  131. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/py.typed +0 -0
  132. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/serialize.py +0 -0
  133. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/__init__.py +0 -0
  134. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/box.py +0 -0
  135. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/global_state.py +0 -0
  136. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/local_state.py +0 -0
  137. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/state/utils.py +0 -0
  138. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/__init__.py +0 -0
  139. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/budget.py +0 -0
  140. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/log.py +0 -0
  141. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utilities/size_of.py +0 -0
  142. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/utils.py +0 -0
  143. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/__init__.py +0 -0
  144. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/arc4.py +0 -0
  145. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/avm.py +0 -0
  146. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/_algopy_testing/value_generators/txn.py +0 -0
  147. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/arc4.py +0 -0
  148. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/gtxn.py +0 -0
  149. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/itxn.py +0 -0
  150. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/op.py +0 -0
  151. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy/py.typed +0 -0
  152. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy_testing/__init__.py +0 -0
  153. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/src/algopy_testing/py.typed +0 -0
  154. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/.macros.j2 +0 -0
  155. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/.release_notes.md.j2 +0 -0
  156. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/templates/CHANGELOG.md.j2 +0 -0
  157. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/__init__.py +0 -0
  158. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/__init__.py +0 -0
  159. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/conftest.py +0 -0
  160. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_address.py +0 -0
  161. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_arc4_method_signature.py +0 -0
  162. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_bool.py +0 -0
  163. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_dynamic_array.py +0 -0
  164. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_dynamic_bytes.py +0 -0
  165. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_emit.py +0 -0
  166. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_static_array.py +0 -0
  167. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_string.py +0 -0
  168. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_struct.py +0 -0
  169. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_tuple.py +0 -0
  170. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_ufixednxm.py +0 -0
  171. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/arc4/test_uintn.py +0 -0
  172. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/__init__.py +0 -0
  173. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/contract.py +0 -0
  174. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.approval.teal +0 -0
  175. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.arc56.json +0 -0
  176. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/Contract.clear.teal +0 -0
  177. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.approval.teal +0 -0
  178. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.arc56.json +0 -0
  179. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV0.clear.teal +0 -0
  180. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.approval.teal +0 -0
  181. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.arc56.json +0 -0
  182. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/AVM12/data/ContractV1.clear.teal +0 -0
  183. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  184. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  185. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
  186. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  187. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -0
  188. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
  189. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  190. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  191. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
  192. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  193. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -0
  194. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
  195. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  196. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  197. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -0
  198. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  199. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -0
  200. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
  201. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/__init__.py +0 -0
  202. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.approval.teal +0 -0
  203. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
  204. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.arc56.json +0 -0
  205. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/Contract.clear.teal +0 -0
  206. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +0 -0
  207. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +0 -0
  208. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +0 -0
  209. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +0 -0
  210. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
  211. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -0
  212. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +0 -0
  213. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
  214. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
  215. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
  216. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
  217. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +0 -0
  218. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/immutable.py +0 -0
  219. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Arrays/uint64.py +0 -0
  220. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/__init__.py +0 -0
  221. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/contract.py +0 -0
  222. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
  223. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  224. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -0
  225. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
  226. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/__init__.py +0 -0
  227. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Contains/data/MyContract.clear.teal +0 -0
  228. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
  229. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  230. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +0 -0
  231. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
  232. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +0 -0
  233. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +0 -0
  234. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +0 -0
  235. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
  236. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -0
  237. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -0
  238. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  239. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/__init__.py +0 -0
  240. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/contract.py +0 -0
  241. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
  242. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  243. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -0
  244. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
  245. {algorand_python_testing-1.2.0b1/tests/artifacts/GlobalStateValidator → algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup}/__init__.py +0 -0
  246. /algorand_python_testing-1.2.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.clear.teal +0 -0
  247. /algorand_python_testing-1.2.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/VerifierContract.clear.teal +0 -0
  248. {algorand_python_testing-1.2.0b1/tests/artifacts/MiscellaneousOps → algorand_python_testing-1.2.0b3/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
  249. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  250. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
  251. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  252. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -0
  253. /algorand_python_testing-1.2.0b1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
  254. {algorand_python_testing-1.2.0b1/tests/artifacts/PrimitiveOps → algorand_python_testing-1.2.0b3/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
  255. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  256. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
  257. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  258. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -0
  259. /algorand_python_testing-1.2.0b1/tests/artifacts/StateMutations/data/StateMutations.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
  260. {algorand_python_testing-1.2.0b1/tests/artifacts/StateMutations → algorand_python_testing-1.2.0b3/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
  261. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  262. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
  263. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  264. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +0 -0
  265. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
  266. {algorand_python_testing-1.2.0b1/tests/artifacts/StateOps → algorand_python_testing-1.2.0b3/tests/artifacts/StateMutations}/__init__.py +0 -0
  267. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  268. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  269. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  270. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +0 -0
  271. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
  272. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -0
  273. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateMutations/data/StateMutations.clear.teal +0 -0
  274. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateMutations/statemutations.py +0 -0
  275. {algorand_python_testing-1.2.0b1/tests/artifacts/Tuples → algorand_python_testing-1.2.0b3/tests/artifacts/StateOps}/__init__.py +0 -0
  276. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/contract.py +0 -0
  277. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -0
  278. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
  279. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +0 -0
  280. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/LocalStateContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
  281. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +0 -0
  282. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
  283. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -0
  284. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
  285. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -0
  286. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
  287. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -0
  288. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
  289. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  290. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  291. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  292. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +0 -0
  293. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
  294. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -0
  295. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
  296. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -0
  297. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
  298. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -0
  299. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
  300. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -0
  301. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
  302. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -0
  303. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
  304. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -0
  305. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
  306. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -0
  307. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
  308. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -0
  309. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
  310. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +0 -0
  311. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
  312. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +0 -0
  313. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
  314. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -0
  315. /algorand_python_testing-1.2.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
  316. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -0
  317. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
  318. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +0 -0
  319. /algorand_python_testing-1.2.0b1/tests/artifacts/Tuples/data/TuplesContract.clear.teal → /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
  320. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +0 -0
  321. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
  322. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -0
  323. {algorand_python_testing-1.2.0b1/tests/artifacts → algorand_python_testing-1.2.0b3/tests/artifacts/Tuples}/__init__.py +0 -0
  324. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/contract.py +0 -0
  325. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +0 -0
  326. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
  327. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +0 -0
  328. {algorand_python_testing-1.2.0b1/tests/avm12 → algorand_python_testing-1.2.0b3/tests/artifacts}/__init__.py +0 -0
  329. {algorand_python_testing-1.2.0b1/tests/contexts → algorand_python_testing-1.2.0b3/tests/avm12}/__init__.py +0 -0
  330. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/avm12/conftest.py +0 -0
  331. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/avm12/test_avm12.py +0 -0
  332. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/common.py +0 -0
  333. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/conftest.py +0 -0
  334. {algorand_python_testing-1.2.0b1/tests/models → algorand_python_testing-1.2.0b3/tests/contexts}/__init__.py +0 -0
  335. {algorand_python_testing-1.2.0b1/tests/primitives → algorand_python_testing-1.2.0b3/tests/dynamic_itxn_group}/__init__.py +0 -0
  336. {algorand_python_testing-1.2.0b1/tests/state → algorand_python_testing-1.2.0b3/tests/models}/__init__.py +0 -0
  337. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_asset.py +0 -0
  338. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box.py +0 -0
  339. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box_map.py +0 -0
  340. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_box_ref.py +0 -0
  341. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_uenumerate.py +0 -0
  342. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/models/test_urange.py +0 -0
  343. {algorand_python_testing-1.2.0b1/tests/utilities → algorand_python_testing-1.2.0b3/tests/primitives}/__init__.py +0 -0
  344. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/conftest.py +0 -0
  345. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_biguint.py +0 -0
  346. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_bytes.py +0 -0
  347. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_fixed_bytes.py +0 -0
  348. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_string.py +0 -0
  349. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/primitives/test_uint64.py +0 -0
  350. {algorand_python_testing-1.2.0b1/tests/value_generators → algorand_python_testing-1.2.0b3/tests/state}/__init__.py +0 -0
  351. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/conftest.py +0 -0
  352. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_global_state.py +0 -0
  353. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_local_state.py +0 -0
  354. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/state/test_mutations.py +0 -0
  355. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_array.py +0 -0
  356. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_context.py +0 -0
  357. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_miscellaneous_op.py +0 -0
  358. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/test_op.py +0 -0
  359. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/util.py +0 -0
  360. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/conftest.py +0 -0
  361. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/test_log.py +0 -0
  362. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/utilities/test_size_of.py +0 -0
  363. {algorand_python_testing-1.2.0b1 → algorand_python_testing-1.2.0b3}/tests/value_generators/test_avm.py +0 -0
@@ -1,4 +1,16 @@
1
1
  # CHANGELOG
2
+ ## v1.2.0-beta.3 (2025-12-08)
3
+
4
+ ### Features
5
+
6
+ * add stage and submit_staged functions to support submitting dynamic number of inner transactions in a group ([`84ad031`](https://github.com/algorandfoundation/algorand-python-testing/commit/84ad03166442dadc10c7c1fe70e4cd07a63600cc))
7
+
8
+ ## v1.2.0-beta.2 (2025-12-08)
9
+
10
+ ### Features
11
+
12
+ * add algopy.public alias for algopy.arc4.abimethod decorator ([`32a2787`](https://github.com/algorandfoundation/algorand-python-testing/commit/32a27877a30f03e5330aa1bdb7a4fadbea543529))
13
+
2
14
  ## v1.2.0-beta.1 (2025-12-05)
3
15
 
4
16
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algorand-python-testing
3
- Version: 1.2.0b1
3
+ Version: 1.2.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
@@ -40,6 +40,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
40
40
  | algopy.ensure_budget | Emulated |
41
41
  | algopy.log | Emulated |
42
42
  | algopy.logicsig | Emulated |
43
+ | algopy.public | Emulated |
43
44
  | algopy.size_of | Emulated |
44
45
  | algopy.subroutine | Native |
45
46
  | algopy.uenumerate | Native |
@@ -95,6 +96,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
95
96
  | algopy.itxn.KeyRegistrationInnerTransaction | Emulated |
96
97
  | algopy.itxn.Payment | Emulated |
97
98
  | algopy.itxn.PaymentInnerTransaction | Emulated |
99
+ | algopy.itxn.submit_staged | Emulated |
98
100
  | algopy.itxn.submit_txns | Emulated |
99
101
  | algopy.op.Base64 | Native |
100
102
  | algopy.op.EC | Native |
@@ -62,7 +62,7 @@ class VotingContract(algopy.ARC4Contract):
62
62
  )
63
63
  self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
64
64
 
65
- @arc4.abimethod
65
+ @algopy.public
66
66
  def set_topic(self, topic: arc4.String) -> None:
67
67
  self.topic.value = topic.bytes
68
68
 
@@ -79,7 +79,7 @@ class VotingContract(algopy.ARC4Contract):
79
79
  self.voted[algopy.Txn.sender] = algopy.UInt64(1)
80
80
  return arc4.Bool(True)
81
81
 
82
- @arc4.abimethod(readonly=True)
82
+ @algopy.public(readonly=True)
83
83
  def get_votes(self) -> arc4.UInt64:
84
84
  return arc4.UInt64(self.votes.value)
85
85
 
@@ -141,9 +141,9 @@ This example demonstrates key aspects of testing with `algorand-python-testing`
141
141
  1. ARC4 Contract Features:
142
142
 
143
143
  - Use of `algopy.ARC4Contract` as the base class for the contract.
144
- - ABI methods defined using the `@arc4.abimethod` decorator.
144
+ - ABI methods defined using the `@arc4.abimethod`, or its alias `@algopy.public`, decorator.
145
145
  - Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
146
- - Readonly method annotation with `@arc4.abimethod(readonly=True)`.
146
+ - Readonly method annotation with `@arc4.abimethod(readonly=True)` or `@algopy.public(readonly=True)` .
147
147
 
148
148
  2. Testing ARC4 Contracts:
149
149
 
@@ -61,5 +61,5 @@ For a full list of all public `algopy` types and their corresponding implementat
61
61
 
62
62
  ## Data Validation
63
63
 
64
- Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator and `.validate()` methods.
65
- The Algorand Python Testing library does *NOT* implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
64
+ Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator (or its alias, `algopy.public`) and `.validate()` methods.
65
+ The Algorand Python Testing library does _NOT_ implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
@@ -1,6 +1,6 @@
1
1
  # Smart Contract Testing
2
2
 
3
- This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `abimethod` and `baremethod` decorators.
3
+ This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `baremethod`, `abimethod` and `public` (an alias of `abimethod`) decorators.
4
4
 
5
5
  ![](https://mermaid.ink/img/pako:eNqVkrFugzAQhl_Fujnp1ImhEiJrJNREWeoOV9sNVsFG9iEVBd69R5w0JE2llsk2n7-7_-AAymsDGewDtpXYrqQT_GyKFwl5vfcBnRZlT5V3IjYYSCjvKKAiCa-JzXfrObyzgTqsxRpVZZ25YOX2nnRrIomCneZzpszLkllktu0f8ratrUKyjFsXCZ1K2gTH7i01_8dGUjOT_55YeLdUFVr3zRunf5b6R5hZoFnBq9cX72_Br_Cj8bl4vJCHaVucvowYxHk5Xg_sfPkY6SbbphDL5dMgQZu29n0U5DMJwzTVGyApySKZKFSNMXKVxPJYYAGNCQ1azX_VYboqgSrTcAcZLzWGDwnSjcxhR37TOwUZhc4sIPhuX0H2jnXkXddqrrCyyKNpTqfjF5m74B8?type=png)
6
6
 
@@ -24,7 +24,7 @@ context = ctx_manager.__enter__()
24
24
 
25
25
  Subclasses of `algopy.ARC4Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance.
26
26
 
27
- Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
27
+ Within the class implementation, methods decorated with `algopy.arc4.abimethod` (or its alias, `algopy.public`) and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
28
28
 
29
29
  ```{testcode}
30
30
  class SimpleVotingContract(algopy.ARC4Contract):
@@ -42,14 +42,14 @@ class SimpleVotingContract(algopy.ARC4Contract):
42
42
  self.topic.value = initial_topic
43
43
  self.votes.value = algopy.UInt64(0)
44
44
 
45
- @algopy.arc4.abimethod
45
+ @algopy.public
46
46
  def vote(self) -> algopy.UInt64:
47
47
  assert self.voted[algopy.Txn.sender] == algopy.UInt64(0), "Account has already voted"
48
48
  self.votes.value += algopy.UInt64(1)
49
49
  self.voted[algopy.Txn.sender] = algopy.UInt64(1)
50
50
  return self.votes.value
51
51
 
52
- @algopy.arc4.abimethod(readonly=True)
52
+ @algopy.public(readonly=True)
53
53
  def get_votes(self) -> algopy.UInt64:
54
54
  return self.votes.value
55
55
 
@@ -74,7 +74,7 @@ assert contract.topic.value == initial_topic
74
74
  assert contract.votes.value == algopy.UInt64(0)
75
75
 
76
76
  # Act - Vote
77
- # The method `.vote()` is decorated with `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
77
+ # The method `.vote()` is decorated with `algopy.public`, an alias of `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
78
78
  result = contract.vote()
79
79
 
80
80
  # Assert - you can access the corresponding auto generated application call transaction via test context
@@ -18,6 +18,8 @@ context = ctx_manager.__enter__()
18
18
 
19
19
  The `@algopy.subroutine` decorator exposes contract methods for isolated testing within the Algorand Python Testing framework. This enables focused validation of core business logic without the overhead of full application deployment and execution.
20
20
 
21
+ `@algopy.subroutine` decorator is optional for the methods in a contract which are not callable externally.
22
+
21
23
  ## Usage
22
24
 
23
25
  1. Decorate internal methods with `@algopy.subroutine`:
@@ -26,7 +28,7 @@ The `@algopy.subroutine` decorator exposes contract methods for isolated testing
26
28
  from algopy import subroutine, UInt64
27
29
 
28
30
  class MyContract:
29
- @subroutine
31
+ @subroutine # optional
30
32
  def calculate_value(self, input: UInt64) -> UInt64:
31
33
  return input * UInt64(2)
32
34
  ```
@@ -143,7 +143,7 @@ When testing smart contracts, to stay consistent with AVM, the framework _does n
143
143
 
144
144
  ```{testcode}
145
145
  class MyContract(algopy.ARC4Contract):
146
- @algopy.arc4.abimethod
146
+ @algopy.public
147
147
  def pay_via_itxn(self, asset: algopy.Asset) -> None:
148
148
  algopy.itxn.Payment(
149
149
  receiver=algopy.Txn.sender,
@@ -180,7 +180,7 @@ first_payment_txn = first_itxn_group.payment(0)
180
180
 
181
181
  In this example, we define a contract method `pay_via_itxn` that creates and submits an inner payment transaction. The test context automatically captures and stores the inner transactions submitted by the contract method.
182
182
 
183
- Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
183
+ Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.public`, an alias of `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
184
184
 
185
185
  To access the submitted inner transactions:
186
186
 
@@ -190,6 +190,75 @@ To access the submitted inner transactions:
190
190
 
191
191
  These methods provide type validation and will raise an error if the requested transaction type doesn't match the actual type of the inner transaction.
192
192
 
193
+ ### Submitting a group with dynamic number of inner transactions
194
+
195
+ `algorand-python` supports composing inner transaction groups with a dynamic number of transactions. To use this feature, call the `.stage()` method on inner transaction classes to queue transactions, then call `algopy.itxn.submit_staged()` to submit all staged transactions as a group.
196
+
197
+ The following example demonstrates how to test this functionality using the `algorand-python-testing` package.
198
+
199
+ ```{testcode}
200
+ from algopy import Application, ARC4Contract, Array, Global, arc4, gtxn, itxn, TransactionType, Txn, UInt64, urange
201
+
202
+ class DynamicItxnGroup(ARC4Contract):
203
+ @arc4.abimethod
204
+ def distribute(
205
+ self, addresses: Array[arc4.Address], funds: gtxn.PaymentTransaction, verifier: Application
206
+ ) -> None:
207
+ assert funds.receiver == Global.current_application_address, "Funds must be sent to app"
208
+
209
+ assert addresses.length, "must provide some accounts"
210
+
211
+ share = funds.amount // addresses.length
212
+
213
+ itxn.Payment(amount=share, receiver=addresses[0].native).stage(begin_group=True)
214
+
215
+ for i in urange(1, addresses.length):
216
+ addr = addresses[i]
217
+ itxn.Payment(amount=share, receiver=addr.native).stage()
218
+
219
+ itxn.ApplicationCall(
220
+ app_id=verifier.id, app_args=(arc4.arc4_signature("verify()void"),)
221
+ ).stage()
222
+
223
+ itxn.AssetConfig(asset_name="abc").stage()
224
+
225
+ itxn.submit_staged()
226
+
227
+ class VerifierContract(ARC4Contract):
228
+ @arc4.abimethod
229
+ def verify(self) -> None:
230
+ for i in urange(Txn.group_index):
231
+ txn = gtxn.Transaction(i)
232
+ assert txn.type == TransactionType.Payment, "Txn must be pay"
233
+
234
+
235
+ # create contract instaces
236
+ verifier = VerifierContract()
237
+ dynamic_itxn_group = DynamicItxnGroup()
238
+
239
+ # get application id for contract instances
240
+ verifier_app = context.ledger.get_app(verifier)
241
+ dynamic_itxn_group_app = context.ledger.get_app(dynamic_itxn_group)
242
+
243
+ # create test accounts to distribute funds to and initial fund
244
+ addresses = Array([arc4.Address(context.any.account()) for _ in range(3)])
245
+ payment = context.any.txn.payment(
246
+ amount=UInt64(9),
247
+ receiver=dynamic_itxn_group_app.address,
248
+ )
249
+
250
+ # call contract method which creates inner transactions according to number of addresses passed in
251
+ dynamic_itxn_group.distribute(addresses, payment, verifier_app)
252
+
253
+ # get inner transaction group to assert the details
254
+ itxns = context.txn.last_group.get_itxn_group(-1)
255
+ assert len(itxns) == 5
256
+ for i in range(3):
257
+ assert itxns.payment(i).amount == 3
258
+ assert itxns.application_call(3).app_id == verifier_app
259
+ assert itxns.asset_config(4).asset_name == b"abc"
260
+ ```
261
+
193
262
  ## References
194
263
 
195
264
  - [API](../api.md) for more details on the test context manager and inner transactions related methods that perform implicit inner transaction type validation.
@@ -9,7 +9,6 @@ from algopy import (
9
9
  gtxn,
10
10
  itxn,
11
11
  op,
12
- subroutine,
13
12
  )
14
13
  from algopy.arc4 import abimethod
15
14
 
@@ -32,7 +31,6 @@ class DigitalMarketplace(ARC4Contract):
32
31
  def __init__(self) -> None:
33
32
  self.listings = BoxMap(ListingKey, ListingValue)
34
33
 
35
- @subroutine
36
34
  def listings_box_mbr(self) -> UInt64:
37
35
  return (
38
36
  2_500
@@ -55,7 +53,6 @@ class DigitalMarketplace(ARC4Contract):
55
53
  * 400
56
54
  )
57
55
 
58
- @subroutine
59
56
  def quantity_price(self, quantity: UInt64, price: UInt64, asset_decimals: UInt64) -> UInt64:
60
57
  amount_not_scaled_high, amount_not_scaled_low = op.mulw(price, quantity)
61
58
  scaling_factor_high, scaling_factor_low = op.expw(10, asset_decimals)
@@ -8,12 +8,12 @@ class ProofOfAttendance(algopy.ARC4Contract):
8
8
  self.total_attendees = algopy.UInt64(0)
9
9
  self.box_map = algopy.BoxMap(algopy.Bytes, algopy.UInt64)
10
10
 
11
- @algopy.arc4.abimethod(create="require")
11
+ @algopy.public(create="require")
12
12
  def init(self, max_attendees: algopy.UInt64) -> None:
13
13
  assert algopy.Txn.sender == algopy.Global.creator_address, "Only creator can initialize"
14
14
  self.max_attendees = max_attendees
15
15
 
16
- @algopy.arc4.abimethod()
16
+ @algopy.public()
17
17
  def confirm_attendance(self) -> None:
18
18
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
19
19
 
@@ -25,7 +25,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
25
25
 
26
26
  algopy.op.Box.put(algopy.Txn.sender.bytes, algopy.op.itob(minted_asset.id))
27
27
 
28
- @algopy.arc4.abimethod()
28
+ @algopy.public()
29
29
  def confirm_attendance_with_box(self) -> None:
30
30
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
31
31
 
@@ -38,7 +38,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
38
38
 
39
39
  box.value = minted_asset.id
40
40
 
41
- @algopy.arc4.abimethod()
41
+ @algopy.public()
42
42
  def confirm_attendance_with_box_ref(self) -> None:
43
43
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
44
44
 
@@ -51,7 +51,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
51
51
 
52
52
  box_ref.value = algopy.op.itob(minted_asset.id)
53
53
 
54
- @algopy.arc4.abimethod()
54
+ @algopy.public()
55
55
  def confirm_attendance_with_box_map(self) -> None:
56
56
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
57
57
 
@@ -63,33 +63,33 @@ class ProofOfAttendance(algopy.ARC4Contract):
63
63
 
64
64
  self.box_map[algopy.Txn.sender.bytes] = minted_asset.id
65
65
 
66
- @algopy.arc4.abimethod(readonly=True)
66
+ @algopy.public(readonly=True)
67
67
  def get_poa_id(self) -> algopy.UInt64:
68
68
  poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
69
69
  assert exists, "POA not found"
70
70
  return algopy.op.btoi(poa_id)
71
71
 
72
- @algopy.arc4.abimethod(readonly=True)
72
+ @algopy.public(readonly=True)
73
73
  def get_poa_id_with_box(self) -> algopy.UInt64:
74
74
  box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
75
75
  poa_id, exists = box.maybe()
76
76
  assert exists, "POA not found"
77
77
  return poa_id
78
78
 
79
- @algopy.arc4.abimethod(readonly=True)
79
+ @algopy.public(readonly=True)
80
80
  def get_poa_id_with_box_ref(self) -> algopy.UInt64:
81
81
  box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
82
82
  poa_id, exists = box_ref.maybe()
83
83
  assert exists, "POA not found"
84
84
  return algopy.op.btoi(poa_id)
85
85
 
86
- @algopy.arc4.abimethod(readonly=True)
86
+ @algopy.public(readonly=True)
87
87
  def get_poa_id_with_box_map(self) -> algopy.UInt64:
88
88
  poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
89
89
  assert exists, "POA not found"
90
90
  return poa_id
91
91
 
92
- @algopy.arc4.abimethod()
92
+ @algopy.public()
93
93
  def claim_poa(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
94
94
  poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
95
95
  assert exists, "POA not found, attendance validation failed!"
@@ -108,7 +108,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
108
108
  algopy.op.btoi(poa_id),
109
109
  )
110
110
 
111
- @algopy.arc4.abimethod()
111
+ @algopy.public()
112
112
  def claim_poa_with_box(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
113
113
  box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
114
114
  poa_id, exists = box.maybe()
@@ -128,7 +128,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
128
128
  poa_id,
129
129
  )
130
130
 
131
- @algopy.arc4.abimethod()
131
+ @algopy.public()
132
132
  def claim_poa_with_box_ref(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
133
133
  box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
134
134
  poa_id, exists = box_ref.maybe()
@@ -148,7 +148,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
148
148
  algopy.op.btoi(poa_id),
149
149
  )
150
150
 
151
- @algopy.arc4.abimethod()
151
+ @algopy.public()
152
152
  def claim_poa_with_box_map(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
153
153
  poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
154
154
  assert exists, "POA not found, attendance validation failed!"
@@ -8,7 +8,6 @@ from algopy import (
8
8
  Txn,
9
9
  UInt64,
10
10
  op,
11
- subroutine,
12
11
  )
13
12
 
14
13
  VOTE_PRICE = 10_000
@@ -24,11 +23,9 @@ class VotingContract(Contract):
24
23
  )
25
24
  self.voted = LocalState(UInt64, key="voted", description="Tracks if an account has voted")
26
25
 
27
- @subroutine
28
26
  def set_topic(self, topic: Bytes) -> None:
29
27
  self.topic.value = topic
30
28
 
31
- @subroutine
32
29
  def vote(self, voter: Account) -> bool:
33
30
  assert op.Global.group_size == UInt64(2)
34
31
  assert op.GTxn.amount(1) == UInt64(VOTE_PRICE)
@@ -40,7 +37,6 @@ class VotingContract(Contract):
40
37
  self.voted[voter] = UInt64(1)
41
38
  return True
42
39
 
43
- @subroutine
44
40
  def get_votes(self) -> UInt64:
45
41
  return self.votes.value
46
42
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "algorand-python-testing"
7
- version = "1.2.0-beta.1"
7
+ version = "1.2.0-beta.3"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: I001
1
2
  from _algopy_testing import arc4, gtxn, itxn
2
3
  from _algopy_testing.context import AlgopyTestContext
3
4
  from _algopy_testing.context_helpers.context_storage import algopy_testing_context
@@ -24,6 +25,9 @@ from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
24
25
  from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
25
26
  from _algopy_testing.value_generators.avm import AVMValueGenerator
26
27
  from _algopy_testing.value_generators.txn import TxnValueGenerator
28
+ from _algopy_testing.decorators.arc4 import (
29
+ abimethod as public,
30
+ )
27
31
 
28
32
  __all__ = [
29
33
  "ARC4Contract",
@@ -60,6 +64,7 @@ __all__ = [
60
64
  "gtxn",
61
65
  "itxn",
62
66
  "logicsig",
67
+ "public",
63
68
  "subroutine",
64
69
  "uenumerate",
65
70
  "urange",
@@ -326,19 +326,19 @@ class TransactionGroup:
326
326
  except ValueError:
327
327
  raise ValueError("Transaction is not part of this group") from None
328
328
 
329
- def _begin_itxn_group(self) -> None:
329
+ def _begin_itxn_group(self, itxn: InnerTransaction | None = None) -> None:
330
330
  if self._constructing_itxn_group:
331
331
  raise RuntimeError("itxn begin without itxn submit")
332
332
 
333
333
  if self.active_txn.on_completion == OnCompleteAction.ClearState:
334
334
  raise RuntimeError("Cannot begin inner transaction group in a clear state call")
335
335
 
336
- self._constructing_itxn_group.append(InnerTransaction())
336
+ self._constructing_itxn_group.append(itxn or InnerTransaction())
337
337
 
338
- def _append_itxn_group(self) -> None:
338
+ def _append_itxn_group(self, itxn: InnerTransaction | None = None) -> None:
339
339
  if not self._constructing_itxn_group:
340
340
  raise RuntimeError("itxn next without itxn begin")
341
- self._constructing_itxn_group.append(InnerTransaction())
341
+ self._constructing_itxn_group.append(itxn or InnerTransaction())
342
342
 
343
343
  def _submit_itxn_group(self) -> None:
344
344
  if not self._constructing_itxn_group:
@@ -33,6 +33,7 @@ __all__ = [
33
33
  "KeyRegistrationInnerTransaction",
34
34
  "Payment",
35
35
  "PaymentInnerTransaction",
36
+ "submit_staged",
36
37
  "submit_txns",
37
38
  ]
38
39
 
@@ -113,6 +114,12 @@ class _BaseInnerTransactionFields(typing.Protocol[_TResult_co]):
113
114
  _narrow_covariant_types(fields)
114
115
  self.fields.update(fields)
115
116
 
117
+ def stage(self, *, begin_group: bool = False) -> None:
118
+ if begin_group:
119
+ lazy_context.active_group._begin_itxn_group(self) # type: ignore[arg-type]
120
+ else:
121
+ lazy_context.active_group._append_itxn_group(self) # type: ignore[arg-type]
122
+
116
123
  def submit(self) -> _TResult_co:
117
124
  result = _get_itxn_result(self)
118
125
  lazy_context.active_group._add_itxn_group([result]) # type: ignore[list-item]
@@ -170,6 +177,10 @@ def submit_txns(
170
177
  return results
171
178
 
172
179
 
180
+ def submit_staged() -> None:
181
+ lazy_context.active_group._submit_itxn_group()
182
+
183
+
173
184
  def _get_itxn_result(
174
185
  itxn: _BaseInnerTransactionFields[_TResult_co],
175
186
  ) -> _BaseInnerTransactionResult:
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: I001
1
2
  from _algopy_testing.compiled import (
2
3
  CompiledContract,
3
4
  CompiledLogicSig,
@@ -33,6 +34,9 @@ from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
33
34
  from _algopy_testing.utilities import OpUpFeeSource, ensure_budget, log, size_of
34
35
 
35
36
  from . import arc4, gtxn, itxn, op
37
+ from _algopy_testing.decorators.arc4 import (
38
+ abimethod as public,
39
+ )
36
40
 
37
41
  __all__ = [
38
42
  "ARC4Contract",
@@ -76,6 +80,7 @@ __all__ = [
76
80
  "log",
77
81
  "logicsig",
78
82
  "op",
83
+ "public",
79
84
  "size_of",
80
85
  "subroutine",
81
86
  "uenumerate",
@@ -4,12 +4,12 @@ from collections.abc import Generator
4
4
  import pytest
5
5
  from _algopy_testing import AlgopyTestContext, algopy_testing_context
6
6
  from _algopy_testing.itxn import ApplicationCallInnerTransaction
7
- from algopy import ARC4Contract, arc4
7
+ from algopy import ARC4Contract, arc4, public
8
8
  from pytest_mock import MockerFixture
9
9
 
10
10
 
11
11
  class Logger(ARC4Contract):
12
- @arc4.abimethod
12
+ @public
13
13
  def echo(self, value: arc4.String) -> arc4.String:
14
14
  return "echo: " + value
15
15