algorand-python-testing 1.2.0b9__tar.gz → 1.2.0b10__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 (384) hide show
  1. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/CHANGELOG.md +12 -0
  2. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/PKG-INFO +1 -1
  3. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/coverage.md +2 -0
  4. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/concepts.md +1 -1
  5. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/pyproject.toml +1 -1
  6. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/arc4.py +76 -8
  7. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/array.py +32 -0
  8. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/serialize.py +3 -3
  9. algorand_python_testing-1.2.0b10/tests/arc4/test_encode_decode.py +331 -0
  10. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4PrimitiveOps/contract.py +247 -1
  11. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +143 -137
  12. algorand_python_testing-1.2.0b10/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +1591 -0
  13. algorand_python_testing-1.2.0b9/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -1575
  14. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.coveragerc +0 -0
  15. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.editorconfig +0 -0
  16. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/dependabot.yml +0 -0
  19. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/pull_request_template.md +0 -0
  20. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/workflows/cd.yaml +0 -0
  21. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/workflows/ci.yaml +0 -0
  22. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.github/workflows/gh-pages.yaml +0 -0
  23. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.gitignore +0 -0
  24. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.pre-commit-config.yaml +0 -0
  25. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.vscode/extensions.json +0 -0
  26. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.vscode/launch.json +0 -0
  27. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/.vscode/settings.json +0 -0
  28. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/CONTRIBUTING.md +0 -0
  29. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/LICENSE +0 -0
  30. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/README.md +0 -0
  31. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/Makefile +0 -0
  32. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/__init__.py +0 -0
  33. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/_static/custom.css +0 -0
  34. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/algopy.md +0 -0
  35. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/api.md +0 -0
  36. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/conf.py +0 -0
  37. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/examples.md +0 -0
  38. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/faq.md +0 -0
  39. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/index.md +0 -0
  40. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/make.bat +0 -0
  41. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/arc4-types.md +0 -0
  42. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/avm-types.md +0 -0
  43. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/contract-testing.md +0 -0
  44. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/index.md +0 -0
  45. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/opcodes.md +0 -0
  46. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/signature-testing.md +0 -0
  47. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/state-management.md +0 -0
  48. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/subroutines.md +0 -0
  49. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/docs/testing-guide/transactions.md +0 -0
  50. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/README.md +0 -0
  51. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/__init__.py +0 -0
  52. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/auction/__init__.py +0 -0
  53. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/auction/contract.py +0 -0
  54. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/auction/test_contract.py +0 -0
  55. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/htlc_logicsig/__init__.py +0 -0
  56. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/htlc_logicsig/signature.py +0 -0
  57. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/htlc_logicsig/test_signature.py +0 -0
  58. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/marketplace/__init__.py +0 -0
  59. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/marketplace/contract.py +0 -0
  60. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/marketplace/test_contract.py +0 -0
  61. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/proof_of_attendance/__init__.py +0 -0
  62. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/proof_of_attendance/contract.py +0 -0
  63. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/proof_of_attendance/test_contract.py +0 -0
  64. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/scratch_storage/__init__.py +0 -0
  65. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/scratch_storage/contract.py +0 -0
  66. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/scratch_storage/test_contract.py +0 -0
  67. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/simple_voting/__init__.py +0 -0
  68. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/simple_voting/contract.py +0 -0
  69. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/simple_voting/test_contract.py +0 -0
  70. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/zk_whitelist/__init__.py +0 -0
  71. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/zk_whitelist/contract.py +0 -0
  72. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/examples/zk_whitelist/test_contract.py +0 -0
  73. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/scripts/__init__.py +0 -0
  74. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/scripts/check_stubs_cov.py +0 -0
  75. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/scripts/refresh_test_artifacts.py +0 -0
  76. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/scripts/validate_examples.py +0 -0
  77. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/__init__.py +0 -0
  78. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/compiled.py +0 -0
  79. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/constants.py +0 -0
  80. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/context.py +0 -0
  81. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  82. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  83. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
  84. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
  85. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/decorators/__init__.py +0 -0
  86. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/decorators/arc4.py +0 -0
  87. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/decorators/subroutine.py +0 -0
  88. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/enums.py +0 -0
  89. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/gtxn.py +0 -0
  90. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/itxn.py +0 -0
  91. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/itxn_loader.py +0 -0
  92. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/__init__.py +0 -0
  93. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/account.py +0 -0
  94. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/application.py +0 -0
  95. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/asset.py +0 -0
  96. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/contract.py +0 -0
  97. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/logicsig.py +0 -0
  98. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/template_variable.py +0 -0
  99. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/txn_fields.py +0 -0
  100. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  101. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/mutable.py +0 -0
  102. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/__init__.py +0 -0
  103. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/block.py +0 -0
  104. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/constants.py +0 -0
  105. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/crypto.py +0 -0
  106. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/global_values.py +0 -0
  107. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/itxn.py +0 -0
  108. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/misc.py +0 -0
  109. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/pure.py +0 -0
  110. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/op/txn.py +0 -0
  111. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/__init__.py +0 -0
  112. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/biguint.py +0 -0
  113. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/bytes.py +0 -0
  114. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/fixed_bytes.py +0 -0
  115. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/string.py +0 -0
  116. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/primitives/uint64.py +0 -0
  117. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/protocols.py +0 -0
  118. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/py.typed +0 -0
  119. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/__init__.py +0 -0
  120. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/box.py +0 -0
  121. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/global_map.py +0 -0
  122. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/global_state.py +0 -0
  123. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/local_map.py +0 -0
  124. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/local_state.py +0 -0
  125. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/state/utils.py +0 -0
  126. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/utilities/__init__.py +0 -0
  127. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/utilities/budget.py +0 -0
  128. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/utilities/log.py +0 -0
  129. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/utilities/size_of.py +0 -0
  130. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/utils.py +0 -0
  131. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/value_generators/__init__.py +0 -0
  132. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/value_generators/arc4.py +0 -0
  133. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/value_generators/avm.py +0 -0
  134. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/_algopy_testing/value_generators/txn.py +0 -0
  135. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/__init__.py +0 -0
  136. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/arc4.py +0 -0
  137. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/gtxn.py +0 -0
  138. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/itxn.py +0 -0
  139. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/op.py +0 -0
  140. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy/py.typed +0 -0
  141. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy_testing/__init__.py +0 -0
  142. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/src/algopy_testing/py.typed +0 -0
  143. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/templates/.macros.j2 +0 -0
  144. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/templates/.release_notes.md.j2 +0 -0
  145. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/templates/CHANGELOG.md.j2 +0 -0
  146. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/__init__.py +0 -0
  147. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/__init__.py +0 -0
  148. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/conftest.py +0 -0
  149. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_abi_call.py +0 -0
  150. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_address.py +0 -0
  151. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_arc4_method_signature.py +0 -0
  152. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_bool.py +0 -0
  153. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_dynamic_array.py +0 -0
  154. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_dynamic_bytes.py +0 -0
  155. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_emit.py +0 -0
  156. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_static_array.py +0 -0
  157. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_string.py +0 -0
  158. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_struct.py +0 -0
  159. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_tuple.py +0 -0
  160. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_ufixednxm.py +0 -0
  161. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/arc4/test_uintn.py +0 -0
  162. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/__init__.py +0 -0
  163. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/contract.py +0 -0
  164. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/Contract.approval.teal +0 -0
  165. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/Contract.arc56.json +0 -0
  166. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/Contract.clear.teal +0 -0
  167. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV0.approval.teal +0 -0
  168. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV0.arc56.json +0 -0
  169. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV0.clear.teal +0 -0
  170. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV1.approval.teal +0 -0
  171. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV1.arc56.json +0 -0
  172. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/AVM12/data/ContractV1.clear.teal +0 -0
  173. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  174. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  175. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
  176. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  177. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -0
  178. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
  179. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  180. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  181. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
  182. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  183. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -0
  184. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
  185. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  186. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  187. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
  188. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/__init__.py +0 -0
  189. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/Contract.approval.teal +0 -0
  190. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
  191. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/Contract.arc56.json +0 -0
  192. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/Contract.clear.teal +0 -0
  193. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +0 -0
  194. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +0 -0
  195. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +0 -0
  196. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +0 -0
  197. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
  198. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -0
  199. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +0 -0
  200. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
  201. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
  202. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
  203. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +0 -0
  204. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
  205. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +0 -0
  206. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +0 -0
  207. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/immutable.py +0 -0
  208. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/static_size.py +0 -0
  209. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Arrays/uint64.py +0 -0
  210. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/__init__.py +0 -0
  211. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/contract.py +0 -0
  212. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
  213. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  214. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -0
  215. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
  216. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Contains/__init__.py +0 -0
  217. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Contains/contract.py +0 -0
  218. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Contains/data/MyContract.approval.teal +0 -0
  219. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Contains/data/MyContract.clear.teal +0 -0
  220. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
  221. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  222. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +0 -0
  223. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
  224. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +0 -0
  225. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +0 -0
  226. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +0 -0
  227. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
  228. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -0
  229. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -0
  230. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  231. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/__init__.py +0 -0
  232. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/contract.py +0 -0
  233. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
  234. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  235. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -0
  236. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
  237. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/__init__.py +0 -0
  238. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/contract.py +0 -0
  239. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.approval.teal +0 -0
  240. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.arc56.json +0 -0
  241. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/DynamicItxnGroup.clear.teal +0 -0
  242. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.approval.teal +0 -0
  243. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.arc56.json +0 -0
  244. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/data/VerifierContract.clear.teal +0 -0
  245. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/DynamicITxnGroup/verifier.py +0 -0
  246. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/__init__.py +0 -0
  247. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  248. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
  249. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  250. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -0
  251. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
  252. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/__init__.py +0 -0
  253. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/data/args_complex.teal +0 -0
  254. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/data/args_complex_no_validation.teal +0 -0
  255. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/data/args_simple.teal +0 -0
  256. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/lsig_args_complex.py +0 -0
  257. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/LogicSignature/lsig_args_simple.py +0 -0
  258. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/__init__.py +0 -0
  259. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  260. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
  261. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  262. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -0
  263. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
  264. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/__init__.py +0 -0
  265. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  266. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
  267. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  268. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +0 -0
  269. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
  270. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/__init__.py +0 -0
  271. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  272. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  273. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  274. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +0 -0
  275. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
  276. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -0
  277. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +0 -0
  278. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateMutations/statemutations.py +0 -0
  279. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/__init__.py +0 -0
  280. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/contract.py +0 -0
  281. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalMapContract.approval.teal +0 -0
  282. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalMapContract.arc56.json +0 -0
  283. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalMapContract.clear.teal +0 -0
  284. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -0
  285. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
  286. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +0 -0
  287. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
  288. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +0 -0
  289. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
  290. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -0
  291. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
  292. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalMapContract.approval.teal +0 -0
  293. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalMapContract.arc56.json +0 -0
  294. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalMapContract.clear.teal +0 -0
  295. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -0
  296. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
  297. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -0
  298. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
  299. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  300. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  301. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  302. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +0 -0
  303. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
  304. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -0
  305. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
  306. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -0
  307. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
  308. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -0
  309. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
  310. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -0
  311. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
  312. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -0
  313. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
  314. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -0
  315. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
  316. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -0
  317. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
  318. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -0
  319. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
  320. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +0 -0
  321. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
  322. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +0 -0
  323. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
  324. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -0
  325. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
  326. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -0
  327. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
  328. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +0 -0
  329. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
  330. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +0 -0
  331. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
  332. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -0
  333. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +0 -0
  334. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/__init__.py +0 -0
  335. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/contract.py +0 -0
  336. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +0 -0
  337. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
  338. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +0 -0
  339. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/Tuples/data/TuplesContract.clear.teal +0 -0
  340. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/artifacts/__init__.py +0 -0
  341. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/avm12/__init__.py +0 -0
  342. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/avm12/conftest.py +0 -0
  343. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/avm12/test_avm12.py +0 -0
  344. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/common.py +0 -0
  345. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/conftest.py +0 -0
  346. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/contexts/__init__.py +0 -0
  347. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/dynamic_itxn_group/__init__.py +0 -0
  348. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/dynamic_itxn_group/test_dynamic_itxn_group.py +0 -0
  349. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/logic_signature/__init__.py +0 -0
  350. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/logic_signature/test_lsig_args_complex.py +0 -0
  351. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/logic_signature/test_lsig_args_simple.py +0 -0
  352. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/__init__.py +0 -0
  353. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_asset.py +0 -0
  354. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_box.py +0 -0
  355. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_box_map.py +0 -0
  356. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_box_ref.py +0 -0
  357. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_contract.py +0 -0
  358. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_uenumerate.py +0 -0
  359. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/models/test_urange.py +0 -0
  360. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/__init__.py +0 -0
  361. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/conftest.py +0 -0
  362. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/test_biguint.py +0 -0
  363. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/test_bytes.py +0 -0
  364. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/test_fixed_bytes.py +0 -0
  365. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/test_string.py +0 -0
  366. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/primitives/test_uint64.py +0 -0
  367. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/__init__.py +0 -0
  368. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/conftest.py +0 -0
  369. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/test_global_map.py +0 -0
  370. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/test_global_state.py +0 -0
  371. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/test_local_map.py +0 -0
  372. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/test_local_state.py +0 -0
  373. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/state/test_mutations.py +0 -0
  374. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/test_array.py +0 -0
  375. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/test_context.py +0 -0
  376. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/test_miscellaneous_op.py +0 -0
  377. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/test_op.py +0 -0
  378. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/util.py +0 -0
  379. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/utilities/__init__.py +0 -0
  380. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/utilities/conftest.py +0 -0
  381. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/utilities/test_log.py +0 -0
  382. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/utilities/test_size_of.py +0 -0
  383. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/value_generators/__init__.py +0 -0
  384. {algorand_python_testing-1.2.0b9 → algorand_python_testing-1.2.0b10}/tests/value_generators/test_avm.py +0 -0
@@ -1,4 +1,16 @@
1
1
  # CHANGELOG
2
+ ## v1.2.0-beta.10 (2026-04-14)
3
+
4
+ ### Features
5
+
6
+ * support native-typed fields in arc4.Struct ([`6ec0127`](https://github.com/algorandfoundation/algorand-python-testing/commit/6ec0127d096f4c2972a6ce844d8a196c384828f6))
7
+
8
+ This unblocks `arc4.encode`/`arc4.decode` of structs with mixed field annotations and lets the AVM parity test invoke the contract directly in-process alongside the AVM check, exercising `test_native_struct` on both paths instead of AVM only.
9
+
10
+ * add support for arc4.encode and arc4.decode functions ([`032b2a8`](https://github.com/algorandfoundation/algorand-python-testing/commit/032b2a826338bc3ff92bca774f3361b39e3afc6e))
11
+
12
+ also migrate `UInt64Backed` serializer off the deprecated `.native` accessor
13
+
2
14
  ## v1.2.0-beta.9 (2026-04-10)
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.0b9
3
+ Version: 1.2.0b10
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
@@ -74,7 +74,9 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
74
74
  | algopy.arc4.abimethod | Emulated |
75
75
  | algopy.arc4.arc4_signature | Native |
76
76
  | algopy.arc4.baremethod | Emulated |
77
+ | algopy.arc4.decode | Emulated |
77
78
  | algopy.arc4.emit | Emulated |
79
+ | algopy.arc4.encode | Emulated |
78
80
  | algopy.arc4.abi_call | Mockable |
79
81
  | algopy.arc4.arc4_create | Mockable |
80
82
  | algopy.arc4.arc4_update | Mockable |
@@ -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 (or its alias, `algopy.public`) and `.validate()` methods.
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`), `.validate()` methods, and the `validate` parameter of `arc4.decode(...)`.
65
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.
@@ -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.9"
7
+ version = "1.2.0-beta.10"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -26,7 +26,7 @@ from _algopy_testing.mutable import (
26
26
  )
27
27
  from _algopy_testing.primitives import Bytes
28
28
  from _algopy_testing.protocols import BytesBacked
29
- from _algopy_testing.serialize import get_native_to_arc4_serializer
29
+ from _algopy_testing.serialize import get_native_to_arc4_serializer, native_to_arc4
30
30
  from _algopy_testing.utils import (
31
31
  as_bytes,
32
32
  as_int,
@@ -73,7 +73,9 @@ __all__ = [
73
73
  "arc4_create",
74
74
  "arc4_signature",
75
75
  "arc4_update",
76
+ "decode",
76
77
  "emit",
78
+ "encode",
77
79
  ]
78
80
 
79
81
  _ABI_LENGTH_SIZE = 2
@@ -1152,9 +1154,40 @@ class _StructMeta(type):
1152
1154
  pass
1153
1155
 
1154
1156
 
1157
+ def _is_arc4_type(field_type: typing.Any) -> bool:
1158
+ return isinstance(field_type, type) and issubclass(field_type, _ABIEncoded)
1159
+
1160
+
1161
+ def _arc4_type_for_field(field_type: typing.Any) -> type[_ABIEncoded]:
1162
+ """Resolve a struct field's declared type to its ARC-4 equivalent.
1163
+
1164
+ Fields annotated with ARC-4 types are returned as-is; native/algopy types
1165
+ are mapped via the serializer registry so `arc4.Struct` accepts either.
1166
+ """
1167
+ if _is_arc4_type(field_type):
1168
+ return field_type # type: ignore[no-any-return]
1169
+ return get_native_to_arc4_serializer(field_type).arc4_type
1170
+
1171
+
1172
+ def _encode_to_arc4(value: object) -> _ABIEncoded:
1173
+ """Wrap a struct field value for encoding — ARC-4 instances pass through, native
1174
+ values are converted via the serializer registry."""
1175
+ if isinstance(value, _ABIEncoded):
1176
+ return value
1177
+ return native_to_arc4(value)
1178
+
1179
+
1180
+ def _to_native_type(field_type: typing.Any, arc4_value: _ABIEncoded) -> object:
1181
+ """Convert a decoded ARC-4 value back to the declared field type — ARC-4 annotations
1182
+ pass through, native annotations go through `arc4_to_native`."""
1183
+ if _is_arc4_type(field_type):
1184
+ return arc4_value
1185
+ return get_native_to_arc4_serializer(field_type).arc4_to_native(arc4_value)
1186
+
1187
+
1155
1188
  def _tuple_type_from_struct(struct: type[Struct]) -> type[Tuple]: # type: ignore[type-arg]
1156
- field_types = [f.type for f in struct._type_info.fields]
1157
- return parameterize_type(Tuple, *field_types) # type: ignore[arg-type]
1189
+ field_types = [_arc4_type_for_field(f.type) for f in struct._type_info.fields]
1190
+ return parameterize_type(Tuple, *field_types)
1158
1191
 
1159
1192
 
1160
1193
  class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta):
@@ -1198,7 +1231,13 @@ class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta):
1198
1231
  tuple_value = tuple_type.from_bytes(value)
1199
1232
  if not tuple_value:
1200
1233
  return typing.cast("typing.Self", tuple_value)
1201
- return cls(*tuple_value.native)
1234
+ # convert each decoded ARC-4 item to the declared field type (ARC-4
1235
+ # annotations pass through, native annotations go through arc4_to_native)
1236
+ items = [
1237
+ _to_native_type(field.type, arc4_item)
1238
+ for arc4_item, field in zip(tuple_value.native, cls._type_info.fields, strict=True)
1239
+ ]
1240
+ return cls(*items)
1202
1241
 
1203
1242
  @property
1204
1243
  def bytes(self) -> algopy.Bytes:
@@ -1208,8 +1247,10 @@ class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta):
1208
1247
  @property
1209
1248
  def _as_tuple(self) -> Tuple: # type: ignore[type-arg]
1210
1249
  # can't use dataclass.astuple here as that processes all dataclasses
1211
- # in the object graph, not just immediate fields
1212
- tuple_items = tuple(getattr(self, field.name) for field in dataclasses.fields(self))
1250
+ # in the object graph, not just immediate fields.
1251
+ tuple_items = tuple(
1252
+ _encode_to_arc4(getattr(self, field.name)) for field in dataclasses.fields(self)
1253
+ )
1213
1254
  return Tuple(tuple_items)
1214
1255
 
1215
1256
  def _replace(self, **kwargs: typing.Any) -> typing.Self:
@@ -1270,9 +1311,36 @@ def emit(event: str | Struct, /, *args: object) -> None:
1270
1311
  log(event_hash[:4] + event_data.value)
1271
1312
 
1272
1313
 
1273
- def _cast_arg_as_arc4(arg: object) -> _ABIEncoded:
1274
- from _algopy_testing.serialize import native_to_arc4
1314
+ def encode(value: object, /) -> algopy.Bytes:
1315
+ return _encode_to_arc4(value).bytes
1316
+
1317
+
1318
+ _TDecode = typing.TypeVar("_TDecode")
1319
+
1275
1320
 
1321
+ def decode(
1322
+ typ: type[_TDecode],
1323
+ value: algopy.Bytes | bytes,
1324
+ /,
1325
+ *,
1326
+ validate: typing.Literal[True, False] = True,
1327
+ ) -> _TDecode:
1328
+ raw = value.value if isinstance(value, Bytes) else value
1329
+
1330
+ if isinstance(typ, type) and issubclass(typ, _ABIEncoded):
1331
+ arc4_value = typ.from_bytes(raw)
1332
+ if validate:
1333
+ arc4_value.validate()
1334
+ return arc4_value
1335
+
1336
+ serializer = get_native_to_arc4_serializer(typ)
1337
+ arc4_value = serializer.arc4_type.from_bytes(raw)
1338
+ if validate:
1339
+ arc4_value.validate()
1340
+ return serializer.arc4_to_native(arc4_value) # type: ignore[no-any-return]
1341
+
1342
+
1343
+ def _cast_arg_as_arc4(arg: object) -> _ABIEncoded:
1276
1344
  if isinstance(arg, int) and not isinstance(arg, bool):
1277
1345
  return UInt64(arg) if arg <= MAX_UINT64 else UInt512(arg)
1278
1346
  if isinstance(arg, bytes):
@@ -206,6 +206,18 @@ class FixedArray(
206
206
  self._items = list(items)
207
207
  self._value = serialize_to_bytes(self)
208
208
 
209
+ def __eq__(self, other: object) -> bool:
210
+ if isinstance(other, self.__class__):
211
+ return (
212
+ self._element_type == other._element_type
213
+ and self._length == other._length
214
+ and self.serialize() == other.serialize()
215
+ )
216
+ return NotImplemented
217
+
218
+ def __hash__(self) -> int:
219
+ return hash(self.serialize())
220
+
209
221
  @classmethod
210
222
  def full(cls, item: _TArrayItem) -> typing.Self:
211
223
  return cls([item] * cls._length)
@@ -358,6 +370,16 @@ class ImmutableArray(Serializable, typing.Generic[_TArrayItem], metaclass=_Immut
358
370
  typ = ImmutableArray[el_type] # type: ignore[valid-type]
359
371
  return typ(items)
360
372
 
373
+ def __eq__(self, other: object) -> bool:
374
+ if isinstance(other, self.__class__):
375
+ return (
376
+ self._element_type == other._element_type and self.serialize() == other.serialize()
377
+ )
378
+ return NotImplemented
379
+
380
+ def __hash__(self) -> int:
381
+ return hash(self.serialize())
382
+
361
383
  def __bool__(self) -> bool:
362
384
  return bool(self._items)
363
385
 
@@ -509,6 +531,16 @@ class Array(Serializable, MutableBytes, typing.Generic[_TArrayItem], metaclass=_
509
531
  typ = Array[el_type] # type: ignore[valid-type]
510
532
  return typ(items)
511
533
 
534
+ def __eq__(self, other: object) -> bool:
535
+ if isinstance(other, self.__class__):
536
+ return (
537
+ self._element_type == other._element_type and self.serialize() == other.serialize()
538
+ )
539
+ return NotImplemented
540
+
541
+ def __hash__(self) -> int:
542
+ return hash(self.serialize())
543
+
512
544
  def __bool__(self) -> bool:
513
545
  return bool(self._items)
514
546
 
@@ -61,7 +61,7 @@ def get_native_to_arc4_serializer( # noqa: PLR0911
61
61
  return _Serializer(
62
62
  arc4_type=arc4.UInt64,
63
63
  native_to_arc4=lambda n: arc4.UInt64(n.int_),
64
- arc4_to_native=lambda a: typ.from_int(a.native),
64
+ arc4_to_native=lambda a: typ.from_int(a.as_uint64()),
65
65
  )
66
66
  if issubclass(typ, FixedBytes):
67
67
  length_type = get_type_generic_from_int_literal(typ._length)
@@ -89,8 +89,8 @@ def get_native_to_arc4_serializer( # noqa: PLR0911
89
89
  native_to_arc4=lambda arr: arc4_type(
90
90
  *[element_serializer.native_to_arc4(e) for e in arr]
91
91
  ),
92
- arc4_to_native=lambda arr: (
93
- typ([element_serializer.arc4_to_native(e) for e in arr])
92
+ arc4_to_native=lambda arr: typ(
93
+ [element_serializer.arc4_to_native(e) for e in arr]
94
94
  ),
95
95
  )
96
96
  if issubclass(typ, FixedArray | ImmutableFixedArray):
@@ -0,0 +1,331 @@
1
+ import typing
2
+ from collections.abc import Generator
3
+ from dataclasses import FrozenInstanceError
4
+
5
+ import _algopy_testing
6
+ import pytest
7
+ from _algopy_testing import arc4
8
+ from algokit_utils.applications import abi
9
+ from algopy import Account, Application, Asset, BigUInt, Bytes, String, UInt64
10
+
11
+ from tests.artifacts.Arc4PrimitiveOps.contract import Arc4PrimitiveOpsContract
12
+ from tests.common import AVMInvoker
13
+
14
+
15
+ class Arc4Struct(arc4.Struct):
16
+ x: arc4.UInt64
17
+ y: arc4.String
18
+
19
+
20
+ class NativeStruct(arc4.Struct):
21
+ a: UInt64
22
+ b: bool
23
+
24
+
25
+ class MixedStruct(arc4.Struct):
26
+ native_u: UInt64
27
+ arc4_u: arc4.UInt64
28
+ native_s: String
29
+ arc4_s: arc4.String
30
+ flag: bool
31
+
32
+
33
+ class NativeStructWithAccount(arc4.Struct):
34
+ owner: Account
35
+ balance: UInt64
36
+
37
+
38
+ class NativeStructWithResources(arc4.Struct):
39
+ asset: Asset
40
+ app: Application
41
+ owner: Account
42
+
43
+
44
+ class OuterStruct(arc4.Struct):
45
+ tag: UInt64
46
+ inner: NativeStruct
47
+
48
+
49
+ class FrozenNativeStruct(arc4.Struct, frozen=True):
50
+ x: UInt64
51
+ y: bool
52
+
53
+
54
+ class MyNamedTuple(typing.NamedTuple):
55
+ x: UInt64
56
+ y: String
57
+
58
+
59
+ @pytest.fixture()
60
+ def context() -> Generator[_algopy_testing.AlgopyTestContext, None, None]:
61
+ with _algopy_testing.algopy_testing_context() as ctx:
62
+ yield ctx
63
+
64
+
65
+ @pytest.mark.parametrize(
66
+ ("native_value", "expected_hex"),
67
+ [
68
+ pytest.param(UInt64(42), "000000000000002a", id="uint64"),
69
+ pytest.param(
70
+ BigUInt(42),
71
+ # BigUInt encodes as ARC-4 UInt512 (64 bytes big-endian)
72
+ "00" * 63 + "2a",
73
+ id="biguint",
74
+ ),
75
+ pytest.param(String("hello"), "000568656c6c6f", id="string"),
76
+ pytest.param(Bytes(b"\x01\x02\x03"), "0003010203", id="bytes"),
77
+ pytest.param(True, "80", id="bool-true"),
78
+ pytest.param(False, "00", id="bool-false"),
79
+ pytest.param(Asset(42), "000000000000002a", id="asset"),
80
+ pytest.param(Application(123), "000000000000007b", id="application"),
81
+ ],
82
+ )
83
+ def test_encode_native_value_bytes(native_value: object, expected_hex: str) -> None:
84
+ encoded = arc4.encode(native_value)
85
+ assert encoded == bytes.fromhex(expected_hex)
86
+
87
+
88
+ @pytest.mark.parametrize(
89
+ ("native_type", "value"),
90
+ [
91
+ pytest.param(UInt64, UInt64(42), id="uint64-42"),
92
+ pytest.param(UInt64, UInt64(0), id="uint64-0"),
93
+ pytest.param(UInt64, UInt64(2**64 - 1), id="uint64-max"),
94
+ pytest.param(BigUInt, BigUInt(0), id="biguint-0"),
95
+ pytest.param(BigUInt, BigUInt(42), id="biguint-42"),
96
+ pytest.param(BigUInt, BigUInt(2**256), id="biguint-large"),
97
+ pytest.param(String, String(""), id="string-empty"),
98
+ pytest.param(String, String("hello"), id="string-hello"),
99
+ pytest.param(Bytes, Bytes(b""), id="bytes-empty"),
100
+ pytest.param(Bytes, Bytes(b"\x01\x02\x03"), id="bytes-three"),
101
+ pytest.param(bool, True, id="bool-true"),
102
+ pytest.param(bool, False, id="bool-false"),
103
+ pytest.param(Asset, Asset(42), id="asset"),
104
+ pytest.param(Application, Application(123), id="application"),
105
+ ],
106
+ )
107
+ def test_encode_decode_round_trip_native(native_type: type, value: object) -> None:
108
+ encoded = arc4.encode(value)
109
+ decoded = arc4.decode(native_type, encoded) # type: ignore[var-annotated]
110
+ assert decoded == value
111
+ assert isinstance(decoded, native_type)
112
+
113
+
114
+ @pytest.mark.parametrize(
115
+ "value",
116
+ [
117
+ arc4.Bool(True),
118
+ arc4.Bool(False),
119
+ arc4.UInt8(7),
120
+ arc4.UInt64(42),
121
+ arc4.UInt256(2**200),
122
+ arc4.UInt512(2**500),
123
+ arc4.String(""),
124
+ arc4.String("hello"),
125
+ arc4.DynamicBytes(b""),
126
+ arc4.DynamicBytes(b"\x01\x02\x03"),
127
+ arc4.StaticArray(arc4.UInt8(1), arc4.UInt8(2), arc4.UInt8(3)),
128
+ arc4.DynamicArray(arc4.String("a"), arc4.String("bc")),
129
+ arc4.Tuple((arc4.UInt64(1), arc4.String("hi"), arc4.Bool(True))),
130
+ ],
131
+ )
132
+ def test_encode_arc4_value_reinterprets_bytes(value: arc4._ABIEncoded) -> None:
133
+ # passing an already-ARC-4-encoded value just returns its underlying bytes
134
+ assert arc4.encode(value) == value.bytes
135
+
136
+
137
+ @pytest.mark.parametrize(
138
+ ("arc4_type", "value"),
139
+ [
140
+ pytest.param(arc4.Bool, arc4.Bool(True), id="bool"),
141
+ pytest.param(arc4.UInt8, arc4.UInt8(7), id="uint8"),
142
+ pytest.param(arc4.UInt64, arc4.UInt64(42), id="uint64"),
143
+ pytest.param(arc4.UInt256, arc4.UInt256(2**200), id="uint256"),
144
+ pytest.param(arc4.String, arc4.String("hello"), id="string"),
145
+ pytest.param(arc4.DynamicBytes, arc4.DynamicBytes(b"\x01\x02\x03"), id="dynamic-bytes"),
146
+ pytest.param(
147
+ arc4.DynamicArray[arc4.UInt64],
148
+ arc4.DynamicArray(arc4.UInt64(1), arc4.UInt64(2), arc4.UInt64(3)),
149
+ id="dynamic-array",
150
+ ),
151
+ pytest.param(
152
+ arc4.StaticArray[arc4.UInt64, typing.Literal[2]],
153
+ arc4.StaticArray(arc4.UInt64(10), arc4.UInt64(20)),
154
+ id="static-array",
155
+ ),
156
+ ],
157
+ )
158
+ def test_decode_returns_arc4_type_when_typ_is_arc4(
159
+ arc4_type: type[arc4._ABIEncoded], value: arc4._ABIEncoded
160
+ ) -> None:
161
+ decoded = arc4.decode(arc4_type, arc4.encode(value))
162
+ assert isinstance(decoded, arc4_type)
163
+ assert decoded == value
164
+
165
+
166
+ def test_encode_decode_mixed_tuple() -> None:
167
+ value = (UInt64(1), String("hi"), True)
168
+ encoded = arc4.encode(value)
169
+ # parity with the canonical ABI encoder
170
+ expected = abi.ABIType.from_string("(uint64,string,bool)").encode((1, "hi", True))
171
+ assert encoded.value == expected
172
+
173
+ decoded = arc4.decode(tuple[UInt64, String, bool], encoded)
174
+ assert decoded == value
175
+
176
+
177
+ def test_encode_decode_named_tuple() -> None:
178
+ value = MyNamedTuple(x=UInt64(5), y=String("test"))
179
+ encoded = arc4.encode(value)
180
+ decoded = arc4.decode(MyNamedTuple, encoded)
181
+ assert decoded == value
182
+
183
+
184
+ def test_encode_decode_arc4_struct() -> None:
185
+ original = Arc4Struct(x=arc4.UInt64(42), y=arc4.String("hello"))
186
+ encoded = arc4.encode(original)
187
+ decoded = arc4.decode(Arc4Struct, encoded)
188
+ assert decoded == original
189
+
190
+
191
+ def test_encode_decode_native_struct() -> None:
192
+ # arc4.Struct with native-typed fields: serialized via native_to_arc4
193
+ # on the way in, and arc4_to_native on the way out, so the decoded fields
194
+ # retain their declared native types.
195
+ original = NativeStruct(a=UInt64(1), b=True)
196
+ encoded = arc4.encode(original)
197
+ # 8-byte UInt64 + 1-byte bool (0x80 = True)
198
+ assert encoded == bytes.fromhex("000000000000000180")
199
+ decoded = arc4.decode(NativeStruct, encoded)
200
+ assert decoded == original
201
+ # ensure the decoded field types match the declared native annotations
202
+ assert isinstance(decoded.a, UInt64)
203
+ assert isinstance(decoded.b, bool)
204
+
205
+
206
+ def test_encode_decode_struct_with_mixed_native_and_arc4_fields() -> None:
207
+ original = MixedStruct(
208
+ native_u=UInt64(5),
209
+ arc4_u=arc4.UInt64(6),
210
+ native_s=String("native"),
211
+ arc4_s=arc4.String("arc4"),
212
+ flag=True,
213
+ )
214
+ encoded = arc4.encode(original)
215
+ decoded = arc4.decode(MixedStruct, encoded)
216
+ assert decoded == original
217
+ # declared types are preserved per-field after round-trip
218
+ assert isinstance(decoded.native_u, UInt64)
219
+ assert isinstance(decoded.arc4_u, arc4.UInt64)
220
+ assert isinstance(decoded.native_s, String)
221
+ assert isinstance(decoded.arc4_s, arc4.String)
222
+ assert isinstance(decoded.flag, bool)
223
+
224
+
225
+ def test_encode_decode_native_struct_with_account_field() -> None:
226
+ # covers a native field whose serializer goes through Account<->Address
227
+ original = NativeStructWithAccount(
228
+ owner=Account("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ"),
229
+ balance=UInt64(1000),
230
+ )
231
+ encoded = arc4.encode(original)
232
+ decoded = arc4.decode(NativeStructWithAccount, encoded)
233
+ assert decoded == original
234
+ assert isinstance(decoded.owner, Account)
235
+ assert isinstance(decoded.balance, UInt64)
236
+
237
+
238
+ def test_native_struct_bytes_match_tuple_bytes() -> None:
239
+ # the struct's encoded bytes must match the canonical ABI tuple encoding
240
+ struct_val = NativeStruct(a=UInt64(1), b=True)
241
+ tuple_bytes = abi.ABIType.from_string("(uint64,bool)").encode((1, True))
242
+ assert arc4.encode(struct_val).value == tuple_bytes
243
+
244
+
245
+ def test_encode_decode_nested_native_struct() -> None:
246
+ # a struct field whose type is itself an arc4.Struct with native fields —
247
+ # exercises the recursive serializer path through Struct → Struct
248
+ original = OuterStruct(tag=UInt64(7), inner=NativeStruct(a=UInt64(1), b=True))
249
+ encoded = arc4.encode(original)
250
+ decoded = arc4.decode(OuterStruct, encoded)
251
+ assert decoded == original
252
+ assert isinstance(decoded.tag, UInt64)
253
+ assert isinstance(decoded.inner, NativeStruct)
254
+ assert isinstance(decoded.inner.a, UInt64)
255
+ assert isinstance(decoded.inner.b, bool)
256
+
257
+
258
+ def test_encode_decode_native_struct_with_resource_fields() -> None:
259
+ # Asset and Application are UInt64Backed natives — the per-field
260
+ # arc4_to_native path routes through `from_int` rather than the simple map
261
+ original = NativeStructWithResources(
262
+ asset=Asset(42),
263
+ app=Application(123),
264
+ owner=Account("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ"),
265
+ )
266
+ encoded = arc4.encode(original)
267
+ decoded = arc4.decode(NativeStructWithResources, encoded)
268
+ assert decoded == original
269
+ assert isinstance(decoded.asset, Asset)
270
+ assert isinstance(decoded.app, Application)
271
+ assert isinstance(decoded.owner, Account)
272
+
273
+
274
+ def test_frozen_native_struct_round_trip_and_mutation_guard() -> None:
275
+ original = FrozenNativeStruct(x=UInt64(9), y=True)
276
+ encoded = arc4.encode(original)
277
+ decoded = arc4.decode(FrozenNativeStruct, encoded)
278
+ assert decoded == original
279
+ # frozen-mutation detection must still fire when native-wrapping is in play
280
+ with pytest.raises(FrozenInstanceError):
281
+ decoded.x = UInt64(10) # type: ignore[misc]
282
+
283
+
284
+ def test_encode_decode_account() -> None:
285
+ value = Account("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ")
286
+ encoded = arc4.encode(value)
287
+ decoded = arc4.decode(Account, encoded)
288
+ assert decoded == value
289
+
290
+
291
+ def test_decode_accepts_raw_bytes_and_algopy_bytes() -> None:
292
+ encoded = arc4.encode(UInt64(123))
293
+ from_algopy_bytes = arc4.decode(UInt64, encoded)
294
+ from_raw_bytes = arc4.decode(UInt64, encoded.value)
295
+ assert from_algopy_bytes == from_raw_bytes == UInt64(123)
296
+
297
+
298
+ def test_encode_rejects_unsupported_type() -> None:
299
+ with pytest.raises(TypeError, match="unserializable type"):
300
+ arc4.encode(object())
301
+
302
+
303
+ @pytest.mark.parametrize(
304
+ "value",
305
+ [
306
+ pytest.param(42, id="int"),
307
+ pytest.param(b"hi", id="bytes"),
308
+ pytest.param("hi", id="str"),
309
+ ],
310
+ )
311
+ def test_encode_rejects_raw_python_primitives(value: object) -> None:
312
+ # raw Python int/bytes/str are intentionally unsupported — callers must wrap them
313
+ # in the corresponding algopy/arc4 type (e.g. UInt64(42), Bytes(b"hi"), String("hi"))
314
+ # so the intended ABI type is explicit.
315
+ with pytest.raises(TypeError, match="unserializable type"):
316
+ arc4.encode(value)
317
+
318
+
319
+ def test_decode_rejects_unsupported_type() -> None:
320
+ with pytest.raises(TypeError, match="unserializable type"):
321
+ arc4.decode(list, b"\x00" * 8)
322
+
323
+
324
+ def test_verify_encode_decode_avm_parity(
325
+ get_avm_result: AVMInvoker,
326
+ context: _algopy_testing.AlgopyTestContext, # noqa: ARG001
327
+ ) -> None:
328
+ # ensure the same encode/decode cases also succeed on the AVM
329
+ get_avm_result("verify_encode_decode")
330
+ contract = Arc4PrimitiveOpsContract()
331
+ contract.verify_encode_decode()