algorand-python-testing 1.2.0b3__tar.gz → 1.2.0b5__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 (380) hide show
  1. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/CHANGELOG.md +20 -0
  2. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/PKG-INFO +1 -1
  3. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/coverage.md +2 -0
  4. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/state-management.md +77 -0
  5. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/pyproject.toml +5 -5
  6. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/__init__.py +3 -1
  7. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/arc4.py +3 -3
  8. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/itxn_loader.py +1 -1
  9. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/account.py +1 -1
  10. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/contract.py +56 -52
  11. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/misc.py +24 -30
  12. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/array.py +1 -1
  13. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/serialize.py +2 -2
  14. algorand_python_testing-1.2.0b5/src/_algopy_testing/state/__init__.py +7 -0
  15. algorand_python_testing-1.2.0b5/src/_algopy_testing/state/global_map.py +95 -0
  16. algorand_python_testing-1.2.0b5/src/_algopy_testing/state/local_map.py +121 -0
  17. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/state/local_state.py +12 -17
  18. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/state/utils.py +15 -3
  19. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/__init__.py +3 -1
  20. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/Contract.arc56.json +2 -2
  21. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV0.arc56.json +1 -1
  22. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV1.arc56.json +1 -1
  23. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +1 -1
  24. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +6 -6
  25. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +1 -1
  26. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +18 -16
  27. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +17 -17
  28. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/Contract.approval.teal +32 -17
  29. algorand_python_testing-1.2.0b5/tests/artifacts/Arrays/data/Contract.arc56.json +371 -0
  30. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +1 -1
  31. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +335 -473
  32. algorand_python_testing-1.2.0b5/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +807 -0
  33. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +13 -10
  34. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +29 -25
  35. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +39 -85
  36. algorand_python_testing-1.2.0b5/tests/artifacts/BoxContract/data/BoxContract.arc56.json +788 -0
  37. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +1 -1
  38. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +1 -2
  39. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +4 -4
  40. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +1 -1
  41. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.approval.teal +35 -35
  42. algorand_python_testing-1.2.0b5/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.arc56.json +161 -0
  43. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.approval.teal +8 -8
  44. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.arc56.json +2 -2
  45. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +1 -1
  46. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +1 -1
  47. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +1 -1
  48. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +288 -332
  49. algorand_python_testing-1.2.0b5/tests/artifacts/StateMutations/data/StateMutations.arc56.json +250 -0
  50. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/statemutations.py +7 -0
  51. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/contract.py +292 -0
  52. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/GlobalMapContract.approval.teal +677 -0
  53. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/GlobalMapContract.arc56.json +784 -0
  54. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +113 -113
  55. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +2 -2
  56. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +20 -20
  57. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +2 -2
  58. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/LocalMapContract.approval.teal +814 -0
  59. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/LocalMapContract.arc56.json +904 -0
  60. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +73 -73
  61. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +2 -2
  62. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +124 -120
  63. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +466 -0
  64. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +22 -22
  65. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +2 -2
  66. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +14 -14
  67. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +2 -2
  68. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +30 -30
  69. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +2 -2
  70. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +7 -7
  71. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +2 -2
  72. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +64 -64
  73. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +2 -2
  74. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +7 -7
  75. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +2 -2
  76. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +85 -85
  77. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +2 -2
  78. algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +7 -0
  79. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +1 -1
  80. algorand_python_testing-1.2.0b5/tests/artifacts/Tuples/data/TuplesContract.clear.teal +7 -0
  81. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_box.py +4 -4
  82. algorand_python_testing-1.2.0b5/tests/state/test_global_map.py +430 -0
  83. algorand_python_testing-1.2.0b5/tests/state/test_local_map.py +508 -0
  84. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/test_op.py +2 -2
  85. algorand_python_testing-1.2.0b3/src/_algopy_testing/state/__init__.py +0 -5
  86. algorand_python_testing-1.2.0b3/tests/artifacts/Arrays/data/Contract.arc56.json +0 -367
  87. algorand_python_testing-1.2.0b3/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -828
  88. algorand_python_testing-1.2.0b3/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -768
  89. algorand_python_testing-1.2.0b3/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.arc56.json +0 -161
  90. algorand_python_testing-1.2.0b3/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -258
  91. algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -466
  92. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.coveragerc +0 -0
  93. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.editorconfig +0 -0
  94. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  95. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  96. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/dependabot.yml +0 -0
  97. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/pull_request_template.md +0 -0
  98. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/workflows/cd.yaml +0 -0
  99. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/workflows/ci.yaml +0 -0
  100. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.github/workflows/gh-pages.yaml +0 -0
  101. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.gitignore +0 -0
  102. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.pre-commit-config.yaml +0 -0
  103. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.vscode/extensions.json +0 -0
  104. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.vscode/launch.json +0 -0
  105. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/.vscode/settings.json +0 -0
  106. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/CONTRIBUTING.md +0 -0
  107. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/LICENSE +0 -0
  108. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/README.md +0 -0
  109. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/Makefile +0 -0
  110. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/__init__.py +0 -0
  111. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/_static/custom.css +0 -0
  112. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/algopy.md +0 -0
  113. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/api.md +0 -0
  114. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/conf.py +0 -0
  115. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/examples.md +0 -0
  116. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/faq.md +0 -0
  117. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/index.md +0 -0
  118. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/make.bat +0 -0
  119. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/arc4-types.md +0 -0
  120. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/avm-types.md +0 -0
  121. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/concepts.md +0 -0
  122. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/contract-testing.md +0 -0
  123. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/index.md +0 -0
  124. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/opcodes.md +0 -0
  125. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/signature-testing.md +0 -0
  126. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/subroutines.md +0 -0
  127. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/docs/testing-guide/transactions.md +0 -0
  128. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/README.md +0 -0
  129. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/__init__.py +0 -0
  130. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/auction/__init__.py +0 -0
  131. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/auction/contract.py +0 -0
  132. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/auction/test_contract.py +0 -0
  133. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/htlc_logicsig/__init__.py +0 -0
  134. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/htlc_logicsig/signature.py +0 -0
  135. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/htlc_logicsig/test_signature.py +0 -0
  136. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/marketplace/__init__.py +0 -0
  137. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/marketplace/contract.py +0 -0
  138. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/marketplace/test_contract.py +0 -0
  139. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/proof_of_attendance/__init__.py +0 -0
  140. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/proof_of_attendance/contract.py +0 -0
  141. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/proof_of_attendance/test_contract.py +0 -0
  142. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/scratch_storage/__init__.py +0 -0
  143. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/scratch_storage/contract.py +0 -0
  144. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/scratch_storage/test_contract.py +0 -0
  145. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/simple_voting/__init__.py +0 -0
  146. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/simple_voting/contract.py +0 -0
  147. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/simple_voting/test_contract.py +0 -0
  148. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/zk_whitelist/__init__.py +0 -0
  149. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/zk_whitelist/contract.py +0 -0
  150. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/examples/zk_whitelist/test_contract.py +0 -0
  151. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/scripts/__init__.py +0 -0
  152. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/scripts/check_stubs_cov.py +0 -0
  153. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/scripts/refresh_test_artifacts.py +0 -0
  154. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/scripts/validate_examples.py +0 -0
  155. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/compiled.py +0 -0
  156. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/constants.py +0 -0
  157. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/context.py +0 -0
  158. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  159. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  160. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
  161. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
  162. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/decorators/__init__.py +0 -0
  163. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/decorators/arc4.py +0 -0
  164. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/decorators/subroutine.py +0 -0
  165. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/enums.py +0 -0
  166. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/gtxn.py +0 -0
  167. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/itxn.py +0 -0
  168. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/__init__.py +0 -0
  169. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/application.py +0 -0
  170. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/asset.py +0 -0
  171. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/logicsig.py +0 -0
  172. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/template_variable.py +0 -0
  173. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/txn_fields.py +0 -0
  174. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  175. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/mutable.py +0 -0
  176. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/__init__.py +0 -0
  177. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/block.py +0 -0
  178. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/constants.py +0 -0
  179. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/crypto.py +0 -0
  180. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/global_values.py +0 -0
  181. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/itxn.py +0 -0
  182. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/pure.py +0 -0
  183. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/op/txn.py +0 -0
  184. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/__init__.py +0 -0
  185. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/biguint.py +0 -0
  186. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/bytes.py +0 -0
  187. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/fixed_bytes.py +0 -0
  188. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/string.py +0 -0
  189. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/primitives/uint64.py +0 -0
  190. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/protocols.py +0 -0
  191. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/py.typed +0 -0
  192. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/state/box.py +0 -0
  193. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/state/global_state.py +0 -0
  194. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/utilities/__init__.py +0 -0
  195. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/utilities/budget.py +0 -0
  196. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/utilities/log.py +0 -0
  197. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/utilities/size_of.py +0 -0
  198. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/utils.py +0 -0
  199. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/value_generators/__init__.py +0 -0
  200. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/value_generators/arc4.py +0 -0
  201. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/value_generators/avm.py +0 -0
  202. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/_algopy_testing/value_generators/txn.py +0 -0
  203. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/arc4.py +0 -0
  204. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/gtxn.py +0 -0
  205. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/itxn.py +0 -0
  206. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/op.py +0 -0
  207. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy/py.typed +0 -0
  208. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy_testing/__init__.py +0 -0
  209. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/src/algopy_testing/py.typed +0 -0
  210. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/templates/.macros.j2 +0 -0
  211. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/templates/.release_notes.md.j2 +0 -0
  212. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/templates/CHANGELOG.md.j2 +0 -0
  213. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/__init__.py +0 -0
  214. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/__init__.py +0 -0
  215. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/conftest.py +0 -0
  216. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_abi_call.py +0 -0
  217. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_address.py +0 -0
  218. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_arc4_method_signature.py +0 -0
  219. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_bool.py +0 -0
  220. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_dynamic_array.py +0 -0
  221. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_dynamic_bytes.py +0 -0
  222. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_emit.py +0 -0
  223. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_static_array.py +0 -0
  224. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_string.py +0 -0
  225. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_struct.py +0 -0
  226. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_tuple.py +0 -0
  227. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_ufixednxm.py +0 -0
  228. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/arc4/test_uintn.py +0 -0
  229. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/__init__.py +0 -0
  230. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/contract.py +0 -0
  231. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/Contract.approval.teal +2 -2
  232. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/Contract.clear.teal +0 -0
  233. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV0.approval.teal +0 -0
  234. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV0.clear.teal +0 -0
  235. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV1.approval.teal +0 -0
  236. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/AVM12/data/ContractV1.clear.teal +0 -0
  237. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  238. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  239. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  240. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
  241. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  242. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  243. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
  244. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  245. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
  246. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  247. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  248. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  249. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
  250. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/__init__.py +0 -0
  251. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
  252. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/Contract.clear.teal +0 -0
  253. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +0 -0
  254. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +0 -0
  255. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
  256. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +0 -0
  257. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
  258. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
  259. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
  260. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
  261. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +0 -0
  262. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/immutable.py +0 -0
  263. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/static_size.py +0 -0
  264. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Arrays/uint64.py +0 -0
  265. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/BoxContract/__init__.py +0 -0
  266. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/BoxContract/contract.py +0 -0
  267. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  268. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
  269. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Contains/__init__.py +0 -0
  270. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Contains/contract.py +0 -0
  271. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Contains/data/MyContract.approval.teal +0 -0
  272. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Contains/data/MyContract.clear.teal +0 -0
  273. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
  274. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  275. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +0 -0
  276. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
  277. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +0 -0
  278. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
  279. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -0
  280. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  281. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/__init__.py +0 -0
  282. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/contract.py +0 -0
  283. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
  284. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  285. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
  286. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/__init__.py +0 -0
  287. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/contract.py +0 -0
  288. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.clear.teal +0 -0
  289. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.clear.teal +0 -0
  290. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/DynamicITxnGroup/verifier.py +0 -0
  291. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/__init__.py +0 -0
  292. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  293. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
  294. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  295. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
  296. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/__init__.py +0 -0
  297. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  298. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
  299. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  300. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
  301. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/__init__.py +0 -0
  302. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  303. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
  304. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  305. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
  306. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/__init__.py +0 -0
  307. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  308. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  309. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  310. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
  311. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +0 -0
  312. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/__init__.py +0 -0
  313. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/GlobalMapContract.clear.teal +0 -0
  314. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
  315. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
  316. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
  317. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/LocalStateContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
  318. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/LocalMapContract.clear.teal +0 -0
  319. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
  320. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
  321. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  322. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  323. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  324. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
  325. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
  326. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
  327. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
  328. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
  329. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
  330. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
  331. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
  332. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
  333. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
  334. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
  335. /algorand_python_testing-1.2.0b3/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
  336. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
  337. /algorand_python_testing-1.2.0b3/tests/artifacts/Tuples/data/TuplesContract.clear.teal → /algorand_python_testing-1.2.0b5/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
  338. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
  339. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Tuples/__init__.py +0 -0
  340. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Tuples/contract.py +0 -0
  341. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +0 -0
  342. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
  343. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/artifacts/__init__.py +0 -0
  344. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/avm12/__init__.py +0 -0
  345. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/avm12/conftest.py +0 -0
  346. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/avm12/test_avm12.py +0 -0
  347. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/common.py +0 -0
  348. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/conftest.py +0 -0
  349. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/contexts/__init__.py +0 -0
  350. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/dynamic_itxn_group/__init__.py +0 -0
  351. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/dynamic_itxn_group/test_dynamic_itxn_group.py +0 -0
  352. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/__init__.py +0 -0
  353. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_asset.py +0 -0
  354. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_box_map.py +0 -0
  355. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_box_ref.py +0 -0
  356. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_contract.py +0 -0
  357. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_uenumerate.py +0 -0
  358. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/models/test_urange.py +0 -0
  359. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/__init__.py +0 -0
  360. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/conftest.py +0 -0
  361. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/test_biguint.py +0 -0
  362. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/test_bytes.py +0 -0
  363. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/test_fixed_bytes.py +0 -0
  364. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/test_string.py +0 -0
  365. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/primitives/test_uint64.py +0 -0
  366. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/state/__init__.py +0 -0
  367. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/state/conftest.py +0 -0
  368. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/state/test_global_state.py +0 -0
  369. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/state/test_local_state.py +0 -0
  370. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/state/test_mutations.py +0 -0
  371. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/test_array.py +0 -0
  372. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/test_context.py +0 -0
  373. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/test_miscellaneous_op.py +0 -0
  374. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/util.py +0 -0
  375. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/utilities/__init__.py +0 -0
  376. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/utilities/conftest.py +0 -0
  377. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/utilities/test_log.py +0 -0
  378. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/utilities/test_size_of.py +0 -0
  379. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/value_generators/__init__.py +0 -0
  380. {algorand_python_testing-1.2.0b3 → algorand_python_testing-1.2.0b5}/tests/value_generators/test_avm.py +0 -0
@@ -1,4 +1,24 @@
1
1
  # CHANGELOG
2
+ ## v1.2.0-beta.5 (2026-04-01)
3
+
4
+ ### Features
5
+
6
+ * add LocalMap ([`447cd47`](https://github.com/algorandfoundation/algorand-python-testing/commit/447cd479a24b8a1fc0c91b51a97b222ba1ea27f8))
7
+
8
+ * add GlobalMap ([`8d75a3b`](https://github.com/algorandfoundation/algorand-python-testing/commit/8d75a3b65a083b6f1484de44a660a58c8abfd2ef))
9
+
10
+ ### Bug fixes
11
+
12
+ * do not count GlobalMap and LocalMap in stateTotals ([`d7da98a`](https://github.com/algorandfoundation/algorand-python-testing/commit/d7da98a5802e7a6f172c63a8fad5c7bec292b9bc))
13
+
14
+ * state totals now correctly handle direct tuple storage ([`8e7d214`](https://github.com/algorandfoundation/algorand-python-testing/commit/8e7d21481de91767c25c1311c4b4ee6363af83b9))
15
+
16
+ ### Documentation
17
+
18
+ * add GlobalMap and LocalMap to state-management guide ([`e8ca7f8`](https://github.com/algorandfoundation/algorand-python-testing/commit/e8ca7f835f66ac0ae1bc6d953d8bdd43cef7e1f5))
19
+
20
+ ## v1.2.0-beta.4 (2026-03-16)
21
+
2
22
  ## v1.2.0-beta.3 (2025-12-08)
3
23
 
4
24
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algorand-python-testing
3
- Version: 1.2.0b3
3
+ Version: 1.2.0b5
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
@@ -20,9 +20,11 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
20
20
  | algopy.FixedArray | Native |
21
21
  | algopy.FixedBytes | Native |
22
22
  | algopy.Global | Emulated |
23
+ | algopy.GlobalMap | Emulated |
23
24
  | algopy.GlobalState | Emulated |
24
25
  | algopy.ImmutableArray | Native |
25
26
  | algopy.ImmutableFixedArray | Native |
27
+ | algopy.LocalMap | Emulated |
26
28
  | algopy.LocalState | Emulated |
27
29
  | algopy.LogicSig | Emulated |
28
30
  | algopy.OnCompleteAction | Native |
@@ -29,6 +29,42 @@ contract.state_a.value = algopy.UInt64(10)
29
29
  contract.state_b.value = algopy.UInt64(20)
30
30
  ```
31
31
 
32
+ ## Global Map
33
+
34
+ `GlobalMap` allows contracts to store collections of key-value pairs in global state, using a common key type and value type with an automatically derived (or explicit) key prefix.
35
+
36
+ ```{testcode}
37
+ class GlobalMapContract(algopy.ARC4Contract):
38
+ def __init__(self):
39
+ # Implicit key prefix (derived from attribute name "scores")
40
+ self.scores = algopy.GlobalMap(algopy.Bytes, algopy.arc4.UInt64)
41
+ # Explicit key prefix
42
+ self.labels = algopy.GlobalMap(algopy.Bytes, algopy.arc4.String, key_prefix="my_labels")
43
+
44
+ # In your test
45
+ contract = GlobalMapContract()
46
+
47
+ # Set and get values
48
+ contract.scores[algopy.Bytes(b"item_a")] = algopy.arc4.UInt64(100)
49
+ assert contract.scores[algopy.Bytes(b"item_a")] == algopy.arc4.UInt64(100)
50
+
51
+ # Check existence
52
+ assert algopy.Bytes(b"item_a") in contract.scores
53
+ assert algopy.Bytes(b"item_b") not in contract.scores
54
+
55
+ # Get with default
56
+ result = contract.scores.get(algopy.Bytes(b"item_b"), default=algopy.arc4.UInt64(0))
57
+ assert result == algopy.arc4.UInt64(0)
58
+
59
+ # Maybe (returns value and existence flag)
60
+ value, exists = contract.scores.maybe(algopy.Bytes(b"item_a"))
61
+ assert exists
62
+
63
+ # Delete
64
+ del contract.scores[algopy.Bytes(b"item_a")]
65
+ assert algopy.Bytes(b"item_a") not in contract.scores
66
+ ```
67
+
32
68
  ## Local State
33
69
 
34
70
  Local state is defined similarly to global state, but accessed using account addresses as keys.
@@ -44,6 +80,47 @@ account = context.any.account()
44
80
  contract.local_state_a[account] = algopy.UInt64(10)
45
81
  ```
46
82
 
83
+ ## Local Map
84
+
85
+ `LocalMap` is similar to `GlobalMap` but stores per-account state. Values are accessed using an `(account, key)` tuple.
86
+
87
+ ```{testcode}
88
+ class LocalMapContract(algopy.ARC4Contract):
89
+ def __init__(self):
90
+ self.balances = algopy.LocalMap(algopy.Bytes, algopy.arc4.UInt64)
91
+
92
+ # In your test
93
+ contract = LocalMapContract()
94
+ account = context.any.account()
95
+
96
+ # Set and get values using (account, key) tuple
97
+ contract.balances[account, algopy.Bytes(b"item_a")] = algopy.arc4.UInt64(500)
98
+ assert contract.balances[account, algopy.Bytes(b"item_a")] == algopy.arc4.UInt64(500)
99
+
100
+ # Check existence
101
+ assert (account, algopy.Bytes(b"item_a")) in contract.balances
102
+ assert (account, algopy.Bytes(b"item_b")) not in contract.balances
103
+
104
+ # Get with default
105
+ result = contract.balances.get(account, algopy.Bytes(b"item_b"), default=algopy.arc4.UInt64(0))
106
+ assert result == algopy.arc4.UInt64(0)
107
+
108
+ # Maybe
109
+ value, exists = contract.balances.maybe(account, algopy.Bytes(b"item_a"))
110
+ assert exists
111
+
112
+ # Delete
113
+ del contract.balances[account, algopy.Bytes(b"item_a")]
114
+ assert (account, algopy.Bytes(b"item_a")) not in contract.balances
115
+
116
+ # Different accounts have independent state
117
+ account2 = context.any.account()
118
+ contract.balances[account, algopy.Bytes(b"item_a")] = algopy.arc4.UInt64(100)
119
+ contract.balances[account2, algopy.Bytes(b"item_a")] = algopy.arc4.UInt64(200)
120
+ assert contract.balances[account, algopy.Bytes(b"item_a")] == algopy.arc4.UInt64(100)
121
+ assert contract.balances[account2, algopy.Bytes(b"item_a")] == algopy.arc4.UInt64(200)
122
+ ```
123
+
47
124
  ## Boxes
48
125
 
49
126
  The framework supports various Box abstractions available in `algorand-python`.
@@ -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.3"
7
+ version = "1.2.0-beta.5"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -50,7 +50,7 @@ type = "virtual"
50
50
  path = ".venv"
51
51
  python = "3.12"
52
52
  dependencies = [
53
- "puyapy>=5",
53
+ "puyapy>=5.7.1",
54
54
  "pytest>=7.4",
55
55
  "pytest-mock>=3.10.0",
56
56
  "pytest-xdist[psutil]>=3.3",
@@ -58,7 +58,7 @@ dependencies = [
58
58
  "algokit-utils>=4.0.0",
59
59
  "pytest-cov>=4.1.0",
60
60
  "prettytable>=3.9.0",
61
- "mypy==1.10",
61
+ "mypy==1.19.1",
62
62
  ]
63
63
 
64
64
  [tool.hatch.envs.default.env-vars]
@@ -132,7 +132,7 @@ dependencies = [
132
132
  "pytest-cov>=4.1.0",
133
133
  "py-algorand-sdk>=2.4.0",
134
134
  "algokit-utils>=4.0.0",
135
- "puyapy>=5",
135
+ "puyapy>=5.7.1",
136
136
  ]
137
137
 
138
138
  [tool.hatch.envs.test.scripts]
@@ -190,7 +190,7 @@ dependencies = [
190
190
  "py-algorand-sdk>=2.4.0",
191
191
  "algokit-utils>=4.0.0",
192
192
  "pytest-cov>=4.1.0",
193
- "mypy==1.10",
193
+ "mypy==1.19.1",
194
194
  ]
195
195
 
196
196
  [tool.hatch.envs.examples.scripts]
@@ -21,7 +21,7 @@ from _algopy_testing.models import (
21
21
  urange,
22
22
  )
23
23
  from _algopy_testing.primitives import BigUInt, Bytes, FixedBytes, String, UInt64
24
- from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
24
+ from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalMap, GlobalState, LocalMap, LocalState
25
25
  from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
26
26
  from _algopy_testing.value_generators.avm import AVMValueGenerator
27
27
  from _algopy_testing.value_generators.txn import TxnValueGenerator
@@ -44,10 +44,12 @@ __all__ = [
44
44
  "Bytes",
45
45
  "Contract",
46
46
  "FixedBytes",
47
+ "GlobalMap",
47
48
  "GlobalState",
48
49
  "ITxnGroupLoader",
49
50
  "ITxnLoader",
50
51
  "LedgerContext",
52
+ "LocalMap",
51
53
  "LocalState",
52
54
  "LogicSig",
53
55
  "OnCompleteAction",
@@ -1154,17 +1154,17 @@ class _StructMeta(type):
1154
1154
 
1155
1155
  def _tuple_type_from_struct(struct: type[Struct]) -> type[Tuple]: # type: ignore[type-arg]
1156
1156
  field_types = [f.type for f in struct._type_info.fields]
1157
- return parameterize_type(Tuple, *field_types)
1157
+ return parameterize_type(Tuple, *field_types) # type: ignore[arg-type]
1158
1158
 
1159
1159
 
1160
- class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta): # type: ignore[misc]
1160
+ class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta):
1161
1161
  """Base class for ARC4 Struct types."""
1162
1162
 
1163
1163
  _type_info: typing.ClassVar[_StructTypeInfo] # type: ignore[misc]
1164
1164
 
1165
1165
  def __init_subclass__(cls, *args: typing.Any, **kwargs: dict[str, typing.Any]) -> None:
1166
1166
  # make implementation not frozen, so we can conditionally control behaviour
1167
- dataclasses.dataclass(cls, *args, **{**kwargs, "frozen": False})
1167
+ dataclasses.dataclass(cls, *args, **{**kwargs, "frozen": False}) # type: ignore[call-overload]
1168
1168
  frozen = kwargs.get("frozen", False)
1169
1169
  assert isinstance(frozen, bool)
1170
1170
  cls._type_info = _StructTypeInfo(cls, frozen=frozen)
@@ -48,7 +48,7 @@ class ITxnLoader:
48
48
  def _get_itxn(self, txn_type: type[_T]) -> _T:
49
49
  if (
50
50
  not isinstance(self._inner_txn, txn_type)
51
- and getattr(self._inner_txn, "type", None) != self._TXN_TYPE_MAP[txn_type]
51
+ and getattr(self._inner_txn, "type", None) != self._TXN_TYPE_MAP[txn_type] # type: ignore[index]
52
52
  ):
53
53
  raise TypeError(f"transaction is not of type {txn_type.__name__}!")
54
54
  return self._inner_txn # type: ignore[return-value]
@@ -75,7 +75,7 @@ class AccountContextData:
75
75
 
76
76
  opted_assets: dict[int, AssetHolding] = dataclasses.field(default_factory=dict)
77
77
  opted_apps: dict[int, algopy.Application] = dataclasses.field(default_factory=dict)
78
- fields: AccountFields = dataclasses.field(default_factory=AccountFields) # type: ignore[arg-type]
78
+ fields: AccountFields = dataclasses.field(default_factory=AccountFields)
79
79
 
80
80
 
81
81
  class Account(BytesBacked):
@@ -115,7 +115,7 @@ class Contract(metaclass=_ContractMeta):
115
115
 
116
116
  def create_txn_group(*args: typing.Any, **kwargs: dict[str, typing.Any]) -> typing.Any:
117
117
  context = lazy_context.value
118
- app = context.ledger.get_app(_get_self_or_active_app_id(self))
118
+ app = context.ledger.get_app(self.__app_id__)
119
119
  txn_fields = get_active_txn_fields(app)
120
120
  txns = [context.any.txn.application_call(**txn_fields)]
121
121
  with context.txn._maybe_implicit_txn_group(txns):
@@ -143,9 +143,7 @@ class Contract(metaclass=_ContractMeta):
143
143
  unproxied_global_state_type = cls.global_state_types[name]
144
144
  except KeyError:
145
145
  return attr
146
- value = lazy_context.ledger.get_global_state(
147
- _get_self_or_active_app_id(self), name.encode("utf8")
148
- )
146
+ value = lazy_context.ledger.get_global_state(self.__app_id__, name.encode("utf8"))
149
147
 
150
148
  value = deserialize(unproxied_global_state_type, value)
151
149
  return set_attr_on_mutate(self, name, value)
@@ -153,20 +151,26 @@ class Contract(metaclass=_ContractMeta):
153
151
  def __setattr__(self, name: str, value: typing.Any) -> None:
154
152
  name_bytes = _algopy_testing.String(name).bytes
155
153
  match value:
156
- case (_algopy_testing.Box() | _algopy_testing.BoxRef()) as box if not box._key:
157
- box._key = name_bytes
154
+ case (_algopy_testing.Box() | _algopy_testing.BoxRef()) as box:
155
+ if not box._key:
156
+ box._key = name_bytes
157
+ case _algopy_testing.BoxMap() as box_map:
158
+ if box_map._key_prefix is None:
159
+ box_map._key_prefix = name_bytes
158
160
  case _algopy_testing.GlobalState() as state:
159
- state.app_id = _get_self_or_active_app_id(self)
161
+ state.app_id = self.__app_id__
160
162
  if not state._key:
161
163
  state.set_key(name_bytes)
162
164
  case _algopy_testing.LocalState() as state:
163
- state.app_id = _get_self_or_active_app_id(self)
165
+ state.app_id = self.__app_id__
164
166
  if not state._key:
165
167
  state._key = name_bytes
166
- case _algopy_testing.BoxMap() as box_map if box_map._key_prefix is None:
167
- box_map._key_prefix = name_bytes
168
- case Bytes() | UInt64() | BytesBacked() | Serializable() | UInt64Backed() | bool():
169
- app_id = _get_self_or_active_app_id(self)
168
+ case _algopy_testing.GlobalMap() | _algopy_testing.LocalMap() as state_map:
169
+ state_map.app_id = self.__app_id__
170
+ if state_map._key_prefix is None:
171
+ state_map._key_prefix = name_bytes
172
+ case _ if _is_data_type(value):
173
+ app_id = self.__app_id__
170
174
  lazy_context.ledger.set_global_state(app_id, name_bytes, serialize(value))
171
175
  cls = type(self)
172
176
  assert isinstance(cls, _ContractMeta)
@@ -175,12 +179,10 @@ class Contract(metaclass=_ContractMeta):
175
179
  super().__setattr__(name, value)
176
180
 
177
181
 
178
- def _get_self_or_active_app_id(contract: Contract) -> int:
179
- try:
180
- return contract.__app_id__
181
- # during construction app_id is not available, get from context instead
182
- except AttributeError:
183
- return lazy_context.active_group.active_app_id
182
+ def _is_data_type(value: object) -> bool:
183
+ return isinstance(
184
+ value, Bytes | UInt64 | BytesBacked | Serializable | UInt64Backed | bool | tuple
185
+ )
184
186
 
185
187
 
186
188
  class ARC4Contract(Contract):
@@ -196,17 +198,15 @@ class ARC4Contract(Contract):
196
198
 
197
199
 
198
200
  def _get_state_totals(contract: Contract, cls_state_totals: StateTotals) -> _StateTotals:
199
- from _algopy_testing.primitives import UInt64
200
- from _algopy_testing.protocols import UInt64Backed
201
-
202
201
  global_bytes = global_uints = local_bytes = local_uints = 0
203
- for type_ in get_global_states(contract).values():
204
- if isinstance(type_, type) and issubclass(type_, UInt64 | UInt64Backed | bool):
202
+ state_types = get_state_types(contract)
203
+ for type_ in state_types.global_types:
204
+ if _is_uint_state(type_):
205
205
  global_uints += 1
206
206
  else:
207
207
  global_bytes += 1
208
- for type_ in get_local_states(contract).values():
209
- if isinstance(type_, type) and issubclass(type_, UInt64 | UInt64Backed | bool):
208
+ for type_ in state_types.local_types:
209
+ if _is_uint_state(type_):
210
210
  local_uints += 1
211
211
  else:
212
212
  local_bytes += 1
@@ -228,6 +228,20 @@ def _get_state_totals(contract: Contract, cls_state_totals: StateTotals) -> _Sta
228
228
  )
229
229
 
230
230
 
231
+ def _is_uint_state(type_: type) -> bool:
232
+ from _algopy_testing.primitives import UInt64
233
+ from _algopy_testing.protocols import UInt64Backed
234
+
235
+ # check to make sure it's actually a type first, otherwise issubclass will
236
+ # fail on Python 3.13
237
+ if not isinstance(type_, type):
238
+ # this should only occur for tuples, bit of a hole in the type-system
239
+ assert typing.get_origin(type_) is tuple
240
+ return False
241
+ else:
242
+ return issubclass(type_, UInt64 | UInt64Backed | bool)
243
+
244
+
231
245
  def _has_create_methods(contract_cls: _ContractMeta) -> bool:
232
246
  for method in vars(contract_cls).values():
233
247
  if callable(method) and (arc4_meta := maybe_arc4_metadata(method)) and arc4_meta.is_create:
@@ -236,30 +250,20 @@ def _has_create_methods(contract_cls: _ContractMeta) -> bool:
236
250
  return False
237
251
 
238
252
 
239
- def get_local_states(contract: Contract) -> dict[bytes, type]:
240
- local_states = {
241
- attribute._key.value: attribute.type_
242
- for _, attribute in vars(contract).items()
243
- if isinstance(attribute, _algopy_testing.LocalState)
244
- }
245
-
246
- return local_states
247
-
248
-
249
- def get_global_states(contract: Contract) -> dict[bytes, type]:
250
- global_states = {}
251
- for key, attribute in vars(contract).items():
252
- if isinstance(
253
- attribute,
254
- _algopy_testing.LocalState
255
- | _algopy_testing.Box
256
- | _algopy_testing.BoxMap
257
- | _algopy_testing.BoxRef,
258
- ) or callable(attribute):
259
- continue
260
- if isinstance(attribute, _algopy_testing.GlobalState):
261
- global_states[attribute.key.value] = attribute.type_
262
- elif isinstance(attribute, UInt64Backed | BytesBacked | UInt64 | Bytes | bool):
263
- global_states[key.encode()] = type(attribute)
264
-
265
- return global_states
253
+ @dataclass
254
+ class _StateTypes:
255
+ local_types: list[type]
256
+ global_types: list[type]
257
+
258
+
259
+ def get_state_types(contract: Contract) -> _StateTypes:
260
+ result = _StateTypes(local_types=[], global_types=[])
261
+ for attribute in contract.__dict__.values():
262
+ match attribute:
263
+ case _algopy_testing.LocalState(type_=value_type):
264
+ result.local_types.append(value_type)
265
+ case _algopy_testing.GlobalState(type_=value_type):
266
+ result.global_types.append(value_type)
267
+ case _ if _is_data_type(attribute):
268
+ result.global_types.append(type(attribute))
269
+ return result
@@ -10,6 +10,7 @@ from _algopy_testing.enums import TransactionType
10
10
  from _algopy_testing.models import Account, Application, Asset
11
11
  from _algopy_testing.primitives.bytes import Bytes
12
12
  from _algopy_testing.primitives.uint64 import UInt64
13
+ from _algopy_testing.state.utils import get_account
13
14
  from _algopy_testing.utils import (
14
15
  raise_mocked_function_error,
15
16
  resolve_app_index,
@@ -30,13 +31,6 @@ def _get_app(app: algopy.Application | algopy.UInt64 | int) -> Application:
30
31
  return lazy_context.ledger.get_app(resolve_app_index(app))
31
32
 
32
33
 
33
- def _get_account(acc: algopy.Account | algopy.UInt64 | int) -> Account:
34
- if isinstance(acc, Account):
35
- return acc
36
- txn = lazy_context.active_group.active_txn
37
- return txn.accounts(acc)
38
-
39
-
40
34
  def _get_asset(asset: algopy.Asset | algopy.UInt64 | int) -> Asset:
41
35
  if isinstance(asset, Asset):
42
36
  return asset
@@ -88,12 +82,12 @@ def gaid(a: algopy.UInt64 | int, /) -> algopy.UInt64:
88
82
 
89
83
 
90
84
  def balance(a: algopy.Account | algopy.UInt64 | int, /) -> algopy.UInt64:
91
- account = _get_account(a)
85
+ account = get_account(a)
92
86
  return account.balance
93
87
 
94
88
 
95
89
  def min_balance(a: algopy.Account | algopy.UInt64 | int, /) -> algopy.UInt64:
96
- account = _get_account(a)
90
+ account = get_account(a)
97
91
  return account.min_balance
98
92
 
99
93
 
@@ -104,7 +98,7 @@ def exit(_a: UInt64 | int, /) -> typing.Never: # noqa: A001
104
98
  def app_opted_in(
105
99
  a: algopy.Account | algopy.UInt64 | int, b: algopy.Application | algopy.UInt64 | int, /
106
100
  ) -> bool:
107
- account = _get_account(a)
101
+ account = get_account(a)
108
102
  app = _get_app(b)
109
103
 
110
104
  return account.is_opted_in(app)
@@ -113,100 +107,100 @@ def app_opted_in(
113
107
  class AcctParamsGet:
114
108
  @staticmethod
115
109
  def acct_auth_addr(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.Account, bool]:
116
- account = _get_account(a)
110
+ account = get_account(a)
117
111
  return account.auth_address, account.balance != 0
118
112
 
119
113
  @staticmethod
120
114
  def acct_balance(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
121
- account = _get_account(a)
115
+ account = get_account(a)
122
116
  return account.balance, account.balance != 0
123
117
 
124
118
  @staticmethod
125
119
  def acct_min_balance(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
126
- account = _get_account(a)
120
+ account = get_account(a)
127
121
  return account.min_balance, account.balance != 0
128
122
 
129
123
  @staticmethod
130
124
  def acct_auth_address(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
131
- account = _get_account(a)
125
+ account = get_account(a)
132
126
  return account.auth_address, account.balance != 0
133
127
 
134
128
  @staticmethod
135
129
  def acct_total_num_uint(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
136
- account = _get_account(a)
130
+ account = get_account(a)
137
131
  return account.total_num_uint, account.balance != 0
138
132
 
139
133
  @staticmethod
140
134
  def acct_total_num_byte_slice(
141
135
  a: algopy.Account | algopy.UInt64 | int,
142
136
  ) -> tuple[algopy.UInt64, bool]:
143
- account = _get_account(a)
137
+ account = get_account(a)
144
138
  return account.total_num_byte_slice, account.balance != 0
145
139
 
146
140
  @staticmethod
147
141
  def acct_total_extra_app_pages(
148
142
  a: algopy.Account | algopy.UInt64 | int,
149
143
  ) -> tuple[algopy.UInt64, bool]:
150
- account = _get_account(a)
144
+ account = get_account(a)
151
145
  return account.total_extra_app_pages, account.balance != 0
152
146
 
153
147
  @staticmethod
154
148
  def acct_total_apps_created(
155
149
  a: algopy.Account | algopy.UInt64 | int,
156
150
  ) -> tuple[algopy.UInt64, bool]:
157
- account = _get_account(a)
151
+ account = get_account(a)
158
152
  return account.total_apps_created, account.balance != 0
159
153
 
160
154
  @staticmethod
161
155
  def acct_total_apps_opted_in(
162
156
  a: algopy.Account | algopy.UInt64 | int,
163
157
  ) -> tuple[algopy.UInt64, bool]:
164
- account = _get_account(a)
158
+ account = get_account(a)
165
159
  return account.total_apps_opted_in, account.balance != 0
166
160
 
167
161
  @staticmethod
168
162
  def acct_total_assets_created(
169
163
  a: algopy.Account | algopy.UInt64 | int,
170
164
  ) -> tuple[algopy.UInt64, bool]:
171
- account = _get_account(a)
165
+ account = get_account(a)
172
166
  return account.total_assets_created, account.balance != 0
173
167
 
174
168
  @staticmethod
175
169
  def acct_total_assets(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
176
- account = _get_account(a)
170
+ account = get_account(a)
177
171
  return account.total_assets, account.balance != 0
178
172
 
179
173
  @staticmethod
180
174
  def acct_total_boxes(a: algopy.Account | algopy.UInt64 | int) -> tuple[algopy.UInt64, bool]:
181
- account = _get_account(a)
175
+ account = get_account(a)
182
176
  return account.total_boxes, account.balance != 0
183
177
 
184
178
  @staticmethod
185
179
  def acct_total_box_bytes(
186
180
  a: algopy.Account | algopy.UInt64 | int,
187
181
  ) -> tuple[algopy.UInt64, bool]:
188
- account = _get_account(a)
182
+ account = get_account(a)
189
183
  return account.total_box_bytes, account.balance != 0
190
184
 
191
185
  @staticmethod
192
186
  def acct_incentive_eligible(
193
187
  a: algopy.Account | algopy.UInt64 | int,
194
188
  ) -> tuple[bool, bool]:
195
- account = _get_account(a)
189
+ account = get_account(a)
196
190
  return account.incentive_eligible, account.balance != 0
197
191
 
198
192
  @staticmethod
199
193
  def acct_last_heartbeat(
200
194
  a: algopy.Account | algopy.UInt64 | int,
201
195
  ) -> tuple[algopy.UInt64, bool]:
202
- account = _get_account(a)
196
+ account = get_account(a)
203
197
  return account.last_heartbeat, account.balance != 0
204
198
 
205
199
  @staticmethod
206
200
  def acct_last_proposed(
207
201
  a: algopy.Account | algopy.UInt64 | int,
208
202
  ) -> tuple[algopy.UInt64, bool]:
209
- account = _get_account(a)
203
+ account = get_account(a)
210
204
  return account.last_proposed, account.balance != 0
211
205
 
212
206
 
@@ -316,7 +310,7 @@ class _AssetHoldingGet:
316
310
  field: str,
317
311
  ) -> tuple[typing.Any, bool]:
318
312
  # Resolve account
319
- account = _get_account(account_or_index)
313
+ account = get_account(account_or_index)
320
314
  try:
321
315
  asset = _get_asset(asset_or_index)
322
316
  except ValueError:
@@ -427,7 +421,7 @@ class _AppLocal:
427
421
  c: algopy.Bytes | bytes,
428
422
  /,
429
423
  ) -> tuple[algopy.Bytes | algopy.UInt64, bool]:
430
- account = _get_account(a)
424
+ account = get_account(a)
431
425
  app = _get_app(b)
432
426
  key = _get_bytes(c)
433
427
  try:
@@ -444,7 +438,7 @@ class _AppLocal:
444
438
  get_ex_uint64 = get_ex_bytes
445
439
 
446
440
  def delete(self, a: algopy.Account | algopy.UInt64 | int, b: algopy.Bytes | bytes, /) -> None:
447
- account = _get_account(a)
441
+ account = get_account(a)
448
442
  key = _get_bytes(b)
449
443
  lazy_context.ledger.set_local_state(lazy_context.active_app_id, account, key, None)
450
444
 
@@ -455,7 +449,7 @@ class _AppLocal:
455
449
  c: algopy.Bytes | algopy.UInt64 | bytes | int,
456
450
  /,
457
451
  ) -> None:
458
- account = _get_account(a)
452
+ account = get_account(a)
459
453
  key = _get_bytes(b)
460
454
  value = c.value if isinstance(c, Bytes | UInt64) else c
461
455
  lazy_context.ledger.set_local_state(lazy_context.active_app_id, account, key, value)
@@ -531,7 +531,7 @@ class Struct(Serializable, MutableBytes):
531
531
 
532
532
  def __init_subclass__(cls, *args: typing.Any, **kwargs: dict[str, typing.Any]) -> None:
533
533
  # make implementation not frozen, so we can conditionally control behaviour
534
- dataclasses.dataclass(cls, *args, **{**kwargs, "frozen": False})
534
+ dataclasses.dataclass(cls, *args, **{**kwargs, "frozen": False}) # type: ignore[call-overload]
535
535
  frozen = kwargs.get("frozen", False)
536
536
  cls._field_names = [
537
537
  f.name for f in dataclasses.fields(typing.cast("type[DataclassInstance]", cls))
@@ -145,7 +145,7 @@ def _get_tuple_serializer(item_types: tuple[type, ...]) -> _Serializer[typing.An
145
145
  return tuple(result)
146
146
 
147
147
  return _Serializer(
148
- arc4_type=arc4.Tuple[*(s.arc4_type for s in serializers)], # type: ignore[misc]
148
+ arc4_type=arc4.Tuple[*(s.arc4_type for s in serializers)], # type: ignore[misc,arg-type]
149
149
  native_to_arc4=lambda t: arc4.Tuple(_items_to_arc4(t)),
150
150
  arc4_to_native=lambda t: _items_to_native(t),
151
151
  )
@@ -190,7 +190,7 @@ def type_of(value: object) -> type:
190
190
  if it is a generic type."""
191
191
  # get fully parametrized tuples
192
192
  if isinstance(value, tuple) and type(value) is tuple:
193
- return tuple[*(type_of(i) for i in value)] # type: ignore[misc, no-any-return]
193
+ return tuple[*(type_of(i) for i in value)] # type: ignore[misc,return-value]
194
194
  else:
195
195
  return type(value)
196
196
 
@@ -0,0 +1,7 @@
1
+ from _algopy_testing.state.box import Box, BoxMap, BoxRef
2
+ from _algopy_testing.state.global_map import GlobalMap
3
+ from _algopy_testing.state.global_state import GlobalState
4
+ from _algopy_testing.state.local_map import LocalMap
5
+ from _algopy_testing.state.local_state import LocalState
6
+
7
+ __all__ = ["Box", "BoxMap", "BoxRef", "GlobalMap", "GlobalState", "LocalMap", "LocalState"]