algorand-python-testing 1.1.0b1__tar.gz → 1.2.0b2__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 (374) hide show
  1. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/CHANGELOG.md +14 -0
  2. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/PKG-INFO +1 -1
  3. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/coverage.md +3 -1
  4. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/index.md +4 -4
  5. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/avm-types.md +16 -0
  6. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/concepts.md +2 -2
  7. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/contract-testing.md +5 -5
  8. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/subroutines.md +3 -1
  9. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/transactions.md +2 -2
  10. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/contract.py +0 -3
  11. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/contract.py +13 -13
  12. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/contract.py +0 -4
  13. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/pyproject.toml +1 -1
  14. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/__init__.py +7 -1
  15. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/arc4.py +3 -1
  16. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/__init__.py +2 -0
  17. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/bytes.py +7 -8
  18. algorand_python_testing-1.2.0b2/src/_algopy_testing/primitives/fixed_bytes.py +336 -0
  19. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/serialize.py +10 -0
  20. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/utils.py +2 -5
  21. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utils.py +2 -0
  22. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/avm.py +15 -0
  23. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/__init__.py +7 -0
  24. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_abi_call.py +2 -2
  25. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_arc4_method_signature.py +9 -3
  26. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/Contract.approval.teal +7 -7
  27. algorand_python_testing-1.2.0b2/tests/artifacts/AVM12/data/Contract.arc56.json +119 -0
  28. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/Contract.clear.teal +1 -1
  29. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.approval.teal +3 -5
  30. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.arc56.json +6 -18
  31. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.clear.teal +1 -1
  32. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.approval.teal +3 -5
  33. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.arc56.json +6 -18
  34. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.clear.teal +1 -1
  35. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/contract.py +5 -2
  36. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +96 -84
  37. algorand_python_testing-1.2.0b2/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +496 -0
  38. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +1 -1
  39. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +3 -5
  40. algorand_python_testing-1.2.0b2/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +88 -0
  41. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +1 -1
  42. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +13 -15
  43. algorand_python_testing-1.2.0b2/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +1575 -0
  44. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +1 -1
  45. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.approval.teal +186 -178
  46. algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/Contract.arc56.json +367 -0
  47. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.clear.teal +1 -1
  48. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +48 -82
  49. algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +131 -0
  50. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +1 -1
  51. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +106 -108
  52. algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +828 -0
  53. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +1 -1
  54. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +60 -66
  55. algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +322 -0
  56. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +1 -1
  57. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/static_size.py +0 -1
  58. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +49 -47
  59. algorand_python_testing-1.2.0b2/tests/artifacts/BoxContract/data/BoxContract.arc56.json +768 -0
  60. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +1 -1
  61. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/contract.py +0 -5
  62. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/data/MyContract.approval.teal +13 -16
  63. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/data/MyContract.clear.teal +1 -1
  64. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +3 -5
  65. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +6 -19
  66. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +1 -1
  67. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +10 -5
  68. algorand_python_testing-1.2.0b2/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +169 -0
  69. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +1 -1
  70. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +7 -9
  71. algorand_python_testing-1.2.0b2/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +437 -0
  72. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +1 -1
  73. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +5 -5
  74. algorand_python_testing-1.2.0b2/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +99 -0
  75. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +1 -1
  76. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +2 -4
  77. algorand_python_testing-1.2.0b2/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +999 -0
  78. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +1 -1
  79. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/contract.py +3 -2
  80. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +11 -8
  81. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +10 -19
  82. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +1 -1
  83. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +2 -4
  84. algorand_python_testing-1.2.0b2/tests/artifacts/StateMutations/data/StateMutations.arc56.json +258 -0
  85. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +1 -1
  86. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +1 -3
  87. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +20 -32
  88. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +1 -1
  89. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +3 -3
  90. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +83 -0
  91. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +1 -1
  92. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +2 -4
  93. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +565 -0
  94. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +1 -1
  95. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +2 -4
  96. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +466 -0
  97. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +1 -1
  98. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +1 -3
  99. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +241 -0
  100. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +1 -1
  101. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +2 -4
  102. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +97 -0
  103. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +1 -1
  104. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +4 -6
  105. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +310 -0
  106. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +1 -1
  107. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +5 -7
  108. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +6 -19
  109. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +1 -1
  110. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +1 -3
  111. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +285 -0
  112. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +1 -1
  113. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +4 -6
  114. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +6 -19
  115. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +1 -1
  116. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +2 -4
  117. algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +354 -0
  118. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +1 -1
  119. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +2 -4
  120. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +6 -19
  121. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.clear.teal +1 -1
  122. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box.py +15 -1
  123. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_contract.py +1 -3
  124. algorand_python_testing-1.2.0b2/tests/primitives/test_fixed_bytes.py +695 -0
  125. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/test_log.py +5 -3
  126. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/test_size_of.py +4 -2
  127. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/value_generators/test_avm.py +15 -2
  128. algorand_python_testing-1.1.0b1/tests/artifacts/AVM12/data/Contract.arc56.json +0 -131
  129. algorand_python_testing-1.1.0b1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -498
  130. algorand_python_testing-1.1.0b1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -101
  131. algorand_python_testing-1.1.0b1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -1587
  132. algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/Contract.arc56.json +0 -379
  133. algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +0 -144
  134. algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -840
  135. algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +0 -334
  136. algorand_python_testing-1.1.0b1/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -780
  137. algorand_python_testing-1.1.0b1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -181
  138. algorand_python_testing-1.1.0b1/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -450
  139. algorand_python_testing-1.1.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -111
  140. algorand_python_testing-1.1.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -1012
  141. algorand_python_testing-1.1.0b1/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -276
  142. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -96
  143. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -583
  144. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -478
  145. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -254
  146. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -104
  147. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -329
  148. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -297
  149. algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -366
  150. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.coveragerc +0 -0
  151. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.editorconfig +0 -0
  152. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  153. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  154. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/dependabot.yml +0 -0
  155. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/pull_request_template.md +0 -0
  156. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/cd.yaml +0 -0
  157. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/ci.yaml +0 -0
  158. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/gh-pages.yaml +0 -0
  159. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.gitignore +0 -0
  160. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.pre-commit-config.yaml +0 -0
  161. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/extensions.json +0 -0
  162. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/launch.json +0 -0
  163. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/settings.json +0 -0
  164. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/CONTRIBUTING.md +0 -0
  165. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/LICENSE +0 -0
  166. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/README.md +0 -0
  167. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/Makefile +0 -0
  168. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/__init__.py +0 -0
  169. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/_static/custom.css +0 -0
  170. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/algopy.md +0 -0
  171. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/api.md +0 -0
  172. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/conf.py +0 -0
  173. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/examples.md +0 -0
  174. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/faq.md +0 -0
  175. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/make.bat +0 -0
  176. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/arc4-types.md +0 -0
  177. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/index.md +0 -0
  178. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/opcodes.md +0 -0
  179. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/signature-testing.md +0 -0
  180. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/state-management.md +0 -0
  181. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/README.md +0 -0
  182. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/__init__.py +0 -0
  183. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/__init__.py +0 -0
  184. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/contract.py +0 -0
  185. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/test_contract.py +0 -0
  186. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/__init__.py +0 -0
  187. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/signature.py +0 -0
  188. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/test_signature.py +0 -0
  189. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/__init__.py +0 -0
  190. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/test_contract.py +0 -0
  191. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/__init__.py +0 -0
  192. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/test_contract.py +0 -0
  193. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/__init__.py +0 -0
  194. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/contract.py +0 -0
  195. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/test_contract.py +0 -0
  196. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/__init__.py +0 -0
  197. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/test_contract.py +0 -0
  198. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/__init__.py +0 -0
  199. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/contract.py +0 -0
  200. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/test_contract.py +0 -0
  201. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/__init__.py +0 -0
  202. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/check_stubs_cov.py +0 -0
  203. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/refresh_test_artifacts.py +0 -0
  204. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/validate_examples.py +0 -0
  205. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/arc4.py +0 -0
  206. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/compiled.py +0 -0
  207. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/constants.py +0 -0
  208. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context.py +0 -0
  209. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  210. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  211. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
  212. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
  213. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/__init__.py +0 -0
  214. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/subroutine.py +0 -0
  215. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/enums.py +0 -0
  216. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/gtxn.py +0 -0
  217. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/itxn.py +0 -0
  218. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/itxn_loader.py +0 -0
  219. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/__init__.py +0 -0
  220. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/account.py +0 -0
  221. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/application.py +0 -0
  222. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/asset.py +0 -0
  223. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/contract.py +0 -0
  224. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/logicsig.py +0 -0
  225. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/template_variable.py +0 -0
  226. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/txn_fields.py +0 -0
  227. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  228. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/mutable.py +0 -0
  229. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/__init__.py +0 -0
  230. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/block.py +0 -0
  231. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/constants.py +0 -0
  232. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/crypto.py +0 -0
  233. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/global_values.py +0 -0
  234. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/itxn.py +0 -0
  235. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/misc.py +0 -0
  236. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/pure.py +0 -0
  237. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/txn.py +0 -0
  238. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/array.py +0 -0
  239. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/biguint.py +0 -0
  240. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/string.py +0 -0
  241. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/uint64.py +0 -0
  242. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/protocols.py +0 -0
  243. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/py.typed +0 -0
  244. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/__init__.py +0 -0
  245. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/box.py +0 -0
  246. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/global_state.py +0 -0
  247. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/local_state.py +0 -0
  248. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/__init__.py +0 -0
  249. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/budget.py +0 -0
  250. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/log.py +0 -0
  251. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/size_of.py +0 -0
  252. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/__init__.py +0 -0
  253. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/arc4.py +0 -0
  254. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/txn.py +0 -0
  255. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/arc4.py +0 -0
  256. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/gtxn.py +0 -0
  257. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/itxn.py +0 -0
  258. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/op.py +0 -0
  259. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/py.typed +0 -0
  260. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy_testing/__init__.py +0 -0
  261. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy_testing/py.typed +0 -0
  262. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/.macros.j2 +0 -0
  263. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/.release_notes.md.j2 +0 -0
  264. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/CHANGELOG.md.j2 +0 -0
  265. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/__init__.py +0 -0
  266. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/__init__.py +0 -0
  267. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/conftest.py +0 -0
  268. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_address.py +0 -0
  269. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_bool.py +0 -0
  270. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_dynamic_array.py +0 -0
  271. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_dynamic_bytes.py +0 -0
  272. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_emit.py +0 -0
  273. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_static_array.py +0 -0
  274. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_string.py +0 -0
  275. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_struct.py +0 -0
  276. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_tuple.py +0 -0
  277. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_ufixednxm.py +0 -0
  278. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_uintn.py +0 -0
  279. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/__init__.py +0 -0
  280. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/contract.py +0 -0
  281. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  282. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
  283. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  284. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  285. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
  286. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  287. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  288. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
  289. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/__init__.py +0 -0
  290. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
  291. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
  292. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
  293. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
  294. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
  295. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
  296. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/immutable.py +0 -0
  297. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/uint64.py +0 -0
  298. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/__init__.py +0 -0
  299. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/contract.py +0 -0
  300. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
  301. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/__init__.py +0 -0
  302. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
  303. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  304. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
  305. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
  306. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  307. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/__init__.py +0 -0
  308. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/contract.py +0 -0
  309. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
  310. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/__init__.py +0 -0
  311. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  312. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
  313. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/__init__.py +0 -0
  314. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  315. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
  316. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/__init__.py +0 -0
  317. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
  318. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/__init__.py +0 -0
  319. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  320. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  321. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  322. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
  323. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/statemutations.py +0 -0
  324. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/__init__.py +0 -0
  325. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/contract.py +0 -0
  326. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
  327. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
  328. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
  329. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  330. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  331. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  332. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
  333. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
  334. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
  335. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
  336. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
  337. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
  338. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
  339. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
  340. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/__init__.py +0 -0
  341. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/contract.py +0 -0
  342. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
  343. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/__init__.py +0 -0
  344. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/__init__.py +0 -0
  345. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/conftest.py +0 -0
  346. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/test_avm12.py +0 -0
  347. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/common.py +0 -0
  348. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/conftest.py +0 -0
  349. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/contexts/__init__.py +0 -0
  350. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/__init__.py +0 -0
  351. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_asset.py +0 -0
  352. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box_map.py +0 -0
  353. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box_ref.py +0 -0
  354. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_uenumerate.py +0 -0
  355. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_urange.py +0 -0
  356. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/__init__.py +0 -0
  357. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/conftest.py +0 -0
  358. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_biguint.py +0 -0
  359. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_bytes.py +0 -0
  360. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_string.py +0 -0
  361. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_uint64.py +0 -0
  362. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/__init__.py +0 -0
  363. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/conftest.py +0 -0
  364. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_global_state.py +0 -0
  365. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_local_state.py +0 -0
  366. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_mutations.py +0 -0
  367. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_array.py +0 -0
  368. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_context.py +0 -0
  369. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_miscellaneous_op.py +0 -0
  370. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_op.py +0 -0
  371. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/util.py +0 -0
  372. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/__init__.py +0 -0
  373. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/conftest.py +0 -0
  374. {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/value_generators/__init__.py +0 -0
@@ -1,4 +1,18 @@
1
1
  # CHANGELOG
2
+ ## v1.2.0-beta.2 (2025-12-08)
3
+
4
+ ### Features
5
+
6
+ * add algopy.public alias for algopy.arc4.abimethod decorator ([`32a2787`](https://github.com/algorandfoundation/algorand-python-testing/commit/32a27877a30f03e5330aa1bdb7a4fadbea543529))
7
+
8
+ ## v1.2.0-beta.1 (2025-12-05)
9
+
10
+ ### Features
11
+
12
+ * add fixed size variant of bytes as a separate `FixedBytes` type ([`9a2ab8e`](https://github.com/algorandfoundation/algorand-python-testing/commit/9a2ab8e3f94e9e7a2a416a94a54cf51b57599089))
13
+
14
+ ## v1.1.0 (2025-10-20)
15
+
2
16
  ## v1.1.0-beta.1 (2025-10-20)
3
17
 
4
18
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algorand-python-testing
3
- Version: 1.1.0b1
3
+ Version: 1.2.0b2
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
@@ -3,7 +3,7 @@
3
3
  See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories. Refer to the [`algorand-python` stubs API](api.md) for the full list of stubs for which the `algorand-python-testing` library provides implementations referenced in the table below.
4
4
 
5
5
  | Name | Implementation type |
6
- |---------------------------------------------|---------------------|
6
+ | ------------------------------------------- | ------------------- |
7
7
  | algopy.Account | Emulated |
8
8
  | algopy.Application | Emulated |
9
9
  | algopy.Asset | Emulated |
@@ -18,6 +18,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
18
18
  | algopy.CompiledLogicSig | Mockable |
19
19
  | algopy.Contract | Emulated |
20
20
  | algopy.FixedArray | Native |
21
+ | algopy.FixedBytes | Native |
21
22
  | algopy.Global | Emulated |
22
23
  | algopy.GlobalState | Emulated |
23
24
  | algopy.ImmutableArray | Native |
@@ -39,6 +40,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
39
40
  | algopy.ensure_budget | Emulated |
40
41
  | algopy.log | Emulated |
41
42
  | algopy.logicsig | Emulated |
43
+ | algopy.public | Emulated |
42
44
  | algopy.size_of | Emulated |
43
45
  | algopy.subroutine | Native |
44
46
  | algopy.uenumerate | Native |
@@ -62,7 +62,7 @@ class VotingContract(algopy.ARC4Contract):
62
62
  )
63
63
  self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
64
64
 
65
- @arc4.abimethod
65
+ @algopy.public
66
66
  def set_topic(self, topic: arc4.String) -> None:
67
67
  self.topic.value = topic.bytes
68
68
 
@@ -79,7 +79,7 @@ class VotingContract(algopy.ARC4Contract):
79
79
  self.voted[algopy.Txn.sender] = algopy.UInt64(1)
80
80
  return arc4.Bool(True)
81
81
 
82
- @arc4.abimethod(readonly=True)
82
+ @algopy.public(readonly=True)
83
83
  def get_votes(self) -> arc4.UInt64:
84
84
  return arc4.UInt64(self.votes.value)
85
85
 
@@ -141,9 +141,9 @@ This example demonstrates key aspects of testing with `algorand-python-testing`
141
141
  1. ARC4 Contract Features:
142
142
 
143
143
  - Use of `algopy.ARC4Contract` as the base class for the contract.
144
- - ABI methods defined using the `@arc4.abimethod` decorator.
144
+ - ABI methods defined using the `@arc4.abimethod`, or its alias `@algopy.public`, decorator.
145
145
  - Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
146
- - Readonly method annotation with `@arc4.abimethod(readonly=True)`.
146
+ - Readonly method annotation with `@arc4.abimethod(readonly=True)` or `@algopy.public(readonly=True)` .
147
147
 
148
148
  2. Testing ARC4 Contracts:
149
149
 
@@ -50,6 +50,22 @@ random_bytes = context.any.bytes()
50
50
  random_bytes = context.any.bytes(length=32)
51
51
  ```
52
52
 
53
+ ## FixedBytes
54
+
55
+ ```{testcode}
56
+ import typing
57
+
58
+ # Direct instantiation
59
+ bytes_value = algopy.FixedBytes[typing.Literal[16]](b"Hello, Algorand!")
60
+
61
+
62
+ # Instantiate test context
63
+ ...
64
+
65
+ # Generate random byte sequences of length 32
66
+ random_bytes = context.any.fixed_bytes(algopy.FixedBytes[typing.Literal[32]])
67
+ ```
68
+
53
69
  ## String
54
70
 
55
71
  ```{testcode}
@@ -61,5 +61,5 @@ For a full list of all public `algopy` types and their corresponding implementat
61
61
 
62
62
  ## Data Validation
63
63
 
64
- Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator and `.validate()` methods.
65
- The Algorand Python Testing library does *NOT* implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
64
+ Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator (or its alias, `algopy.public`) and `.validate()` methods.
65
+ The Algorand Python Testing library does _NOT_ implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
@@ -1,6 +1,6 @@
1
1
  # Smart Contract Testing
2
2
 
3
- This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `abimethod` and `baremethod` decorators.
3
+ This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `baremethod`, `abimethod` and `public` (an alias of `abimethod`) decorators.
4
4
 
5
5
  ![](https://mermaid.ink/img/pako:eNqVkrFugzAQhl_Fujnp1ImhEiJrJNREWeoOV9sNVsFG9iEVBd69R5w0JE2llsk2n7-7_-AAymsDGewDtpXYrqQT_GyKFwl5vfcBnRZlT5V3IjYYSCjvKKAiCa-JzXfrObyzgTqsxRpVZZ25YOX2nnRrIomCneZzpszLkllktu0f8ratrUKyjFsXCZ1K2gTH7i01_8dGUjOT_55YeLdUFVr3zRunf5b6R5hZoFnBq9cX72_Br_Cj8bl4vJCHaVucvowYxHk5Xg_sfPkY6SbbphDL5dMgQZu29n0U5DMJwzTVGyApySKZKFSNMXKVxPJYYAGNCQ1azX_VYboqgSrTcAcZLzWGDwnSjcxhR37TOwUZhc4sIPhuX0H2jnXkXddqrrCyyKNpTqfjF5m74B8?type=png)
6
6
 
@@ -24,7 +24,7 @@ context = ctx_manager.__enter__()
24
24
 
25
25
  Subclasses of `algopy.ARC4Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance.
26
26
 
27
- Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
27
+ Within the class implementation, methods decorated with `algopy.arc4.abimethod` (or its alias, `algopy.public`) and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
28
28
 
29
29
  ```{testcode}
30
30
  class SimpleVotingContract(algopy.ARC4Contract):
@@ -42,14 +42,14 @@ class SimpleVotingContract(algopy.ARC4Contract):
42
42
  self.topic.value = initial_topic
43
43
  self.votes.value = algopy.UInt64(0)
44
44
 
45
- @algopy.arc4.abimethod
45
+ @algopy.public
46
46
  def vote(self) -> algopy.UInt64:
47
47
  assert self.voted[algopy.Txn.sender] == algopy.UInt64(0), "Account has already voted"
48
48
  self.votes.value += algopy.UInt64(1)
49
49
  self.voted[algopy.Txn.sender] = algopy.UInt64(1)
50
50
  return self.votes.value
51
51
 
52
- @algopy.arc4.abimethod(readonly=True)
52
+ @algopy.public(readonly=True)
53
53
  def get_votes(self) -> algopy.UInt64:
54
54
  return self.votes.value
55
55
 
@@ -74,7 +74,7 @@ assert contract.topic.value == initial_topic
74
74
  assert contract.votes.value == algopy.UInt64(0)
75
75
 
76
76
  # Act - Vote
77
- # The method `.vote()` is decorated with `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
77
+ # The method `.vote()` is decorated with `algopy.public`, an alias of `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
78
78
  result = contract.vote()
79
79
 
80
80
  # Assert - you can access the corresponding auto generated application call transaction via test context
@@ -18,6 +18,8 @@ context = ctx_manager.__enter__()
18
18
 
19
19
  The `@algopy.subroutine` decorator exposes contract methods for isolated testing within the Algorand Python Testing framework. This enables focused validation of core business logic without the overhead of full application deployment and execution.
20
20
 
21
+ `@algopy.subroutine` decorator is optional for the methods in a contract which are not callable externally.
22
+
21
23
  ## Usage
22
24
 
23
25
  1. Decorate internal methods with `@algopy.subroutine`:
@@ -26,7 +28,7 @@ The `@algopy.subroutine` decorator exposes contract methods for isolated testing
26
28
  from algopy import subroutine, UInt64
27
29
 
28
30
  class MyContract:
29
- @subroutine
31
+ @subroutine # optional
30
32
  def calculate_value(self, input: UInt64) -> UInt64:
31
33
  return input * UInt64(2)
32
34
  ```
@@ -143,7 +143,7 @@ When testing smart contracts, to stay consistent with AVM, the framework _does n
143
143
 
144
144
  ```{testcode}
145
145
  class MyContract(algopy.ARC4Contract):
146
- @algopy.arc4.abimethod
146
+ @algopy.public
147
147
  def pay_via_itxn(self, asset: algopy.Asset) -> None:
148
148
  algopy.itxn.Payment(
149
149
  receiver=algopy.Txn.sender,
@@ -180,7 +180,7 @@ first_payment_txn = first_itxn_group.payment(0)
180
180
 
181
181
  In this example, we define a contract method `pay_via_itxn` that creates and submits an inner payment transaction. The test context automatically captures and stores the inner transactions submitted by the contract method.
182
182
 
183
- Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
183
+ Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.public`, an alias of `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
184
184
 
185
185
  To access the submitted inner transactions:
186
186
 
@@ -9,7 +9,6 @@ from algopy import (
9
9
  gtxn,
10
10
  itxn,
11
11
  op,
12
- subroutine,
13
12
  )
14
13
  from algopy.arc4 import abimethod
15
14
 
@@ -32,7 +31,6 @@ class DigitalMarketplace(ARC4Contract):
32
31
  def __init__(self) -> None:
33
32
  self.listings = BoxMap(ListingKey, ListingValue)
34
33
 
35
- @subroutine
36
34
  def listings_box_mbr(self) -> UInt64:
37
35
  return (
38
36
  2_500
@@ -55,7 +53,6 @@ class DigitalMarketplace(ARC4Contract):
55
53
  * 400
56
54
  )
57
55
 
58
- @subroutine
59
56
  def quantity_price(self, quantity: UInt64, price: UInt64, asset_decimals: UInt64) -> UInt64:
60
57
  amount_not_scaled_high, amount_not_scaled_low = op.mulw(price, quantity)
61
58
  scaling_factor_high, scaling_factor_low = op.expw(10, asset_decimals)
@@ -8,12 +8,12 @@ class ProofOfAttendance(algopy.ARC4Contract):
8
8
  self.total_attendees = algopy.UInt64(0)
9
9
  self.box_map = algopy.BoxMap(algopy.Bytes, algopy.UInt64)
10
10
 
11
- @algopy.arc4.abimethod(create="require")
11
+ @algopy.public(create="require")
12
12
  def init(self, max_attendees: algopy.UInt64) -> None:
13
13
  assert algopy.Txn.sender == algopy.Global.creator_address, "Only creator can initialize"
14
14
  self.max_attendees = max_attendees
15
15
 
16
- @algopy.arc4.abimethod()
16
+ @algopy.public()
17
17
  def confirm_attendance(self) -> None:
18
18
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
19
19
 
@@ -25,7 +25,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
25
25
 
26
26
  algopy.op.Box.put(algopy.Txn.sender.bytes, algopy.op.itob(minted_asset.id))
27
27
 
28
- @algopy.arc4.abimethod()
28
+ @algopy.public()
29
29
  def confirm_attendance_with_box(self) -> None:
30
30
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
31
31
 
@@ -38,7 +38,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
38
38
 
39
39
  box.value = minted_asset.id
40
40
 
41
- @algopy.arc4.abimethod()
41
+ @algopy.public()
42
42
  def confirm_attendance_with_box_ref(self) -> None:
43
43
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
44
44
 
@@ -51,7 +51,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
51
51
 
52
52
  box_ref.value = algopy.op.itob(minted_asset.id)
53
53
 
54
- @algopy.arc4.abimethod()
54
+ @algopy.public()
55
55
  def confirm_attendance_with_box_map(self) -> None:
56
56
  assert self.total_attendees < self.max_attendees, "Max attendees reached"
57
57
 
@@ -63,33 +63,33 @@ class ProofOfAttendance(algopy.ARC4Contract):
63
63
 
64
64
  self.box_map[algopy.Txn.sender.bytes] = minted_asset.id
65
65
 
66
- @algopy.arc4.abimethod(readonly=True)
66
+ @algopy.public(readonly=True)
67
67
  def get_poa_id(self) -> algopy.UInt64:
68
68
  poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
69
69
  assert exists, "POA not found"
70
70
  return algopy.op.btoi(poa_id)
71
71
 
72
- @algopy.arc4.abimethod(readonly=True)
72
+ @algopy.public(readonly=True)
73
73
  def get_poa_id_with_box(self) -> algopy.UInt64:
74
74
  box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
75
75
  poa_id, exists = box.maybe()
76
76
  assert exists, "POA not found"
77
77
  return poa_id
78
78
 
79
- @algopy.arc4.abimethod(readonly=True)
79
+ @algopy.public(readonly=True)
80
80
  def get_poa_id_with_box_ref(self) -> algopy.UInt64:
81
81
  box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
82
82
  poa_id, exists = box_ref.maybe()
83
83
  assert exists, "POA not found"
84
84
  return algopy.op.btoi(poa_id)
85
85
 
86
- @algopy.arc4.abimethod(readonly=True)
86
+ @algopy.public(readonly=True)
87
87
  def get_poa_id_with_box_map(self) -> algopy.UInt64:
88
88
  poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
89
89
  assert exists, "POA not found"
90
90
  return poa_id
91
91
 
92
- @algopy.arc4.abimethod()
92
+ @algopy.public()
93
93
  def claim_poa(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
94
94
  poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
95
95
  assert exists, "POA not found, attendance validation failed!"
@@ -108,7 +108,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
108
108
  algopy.op.btoi(poa_id),
109
109
  )
110
110
 
111
- @algopy.arc4.abimethod()
111
+ @algopy.public()
112
112
  def claim_poa_with_box(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
113
113
  box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
114
114
  poa_id, exists = box.maybe()
@@ -128,7 +128,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
128
128
  poa_id,
129
129
  )
130
130
 
131
- @algopy.arc4.abimethod()
131
+ @algopy.public()
132
132
  def claim_poa_with_box_ref(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
133
133
  box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
134
134
  poa_id, exists = box_ref.maybe()
@@ -148,7 +148,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
148
148
  algopy.op.btoi(poa_id),
149
149
  )
150
150
 
151
- @algopy.arc4.abimethod()
151
+ @algopy.public()
152
152
  def claim_poa_with_box_map(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
153
153
  poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
154
154
  assert exists, "POA not found, attendance validation failed!"
@@ -8,7 +8,6 @@ from algopy import (
8
8
  Txn,
9
9
  UInt64,
10
10
  op,
11
- subroutine,
12
11
  )
13
12
 
14
13
  VOTE_PRICE = 10_000
@@ -24,11 +23,9 @@ class VotingContract(Contract):
24
23
  )
25
24
  self.voted = LocalState(UInt64, key="voted", description="Tracks if an account has voted")
26
25
 
27
- @subroutine
28
26
  def set_topic(self, topic: Bytes) -> None:
29
27
  self.topic.value = topic
30
28
 
31
- @subroutine
32
29
  def vote(self, voter: Account) -> bool:
33
30
  assert op.Global.group_size == UInt64(2)
34
31
  assert op.GTxn.amount(1) == UInt64(VOTE_PRICE)
@@ -40,7 +37,6 @@ class VotingContract(Contract):
40
37
  self.voted[voter] = UInt64(1)
41
38
  return True
42
39
 
43
- @subroutine
44
40
  def get_votes(self) -> UInt64:
45
41
  return self.votes.value
46
42
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "algorand-python-testing"
7
- version = "1.1.0-beta.1"
7
+ version = "1.2.0-beta.2"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: I001
1
2
  from _algopy_testing import arc4, gtxn, itxn
2
3
  from _algopy_testing.context import AlgopyTestContext
3
4
  from _algopy_testing.context_helpers.context_storage import algopy_testing_context
@@ -19,11 +20,14 @@ from _algopy_testing.models import (
19
20
  uenumerate,
20
21
  urange,
21
22
  )
22
- from _algopy_testing.primitives import BigUInt, Bytes, String, UInt64
23
+ from _algopy_testing.primitives import BigUInt, Bytes, FixedBytes, String, UInt64
23
24
  from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
24
25
  from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
25
26
  from _algopy_testing.value_generators.avm import AVMValueGenerator
26
27
  from _algopy_testing.value_generators.txn import TxnValueGenerator
28
+ from _algopy_testing.decorators.arc4 import (
29
+ abimethod as public,
30
+ )
27
31
 
28
32
  __all__ = [
29
33
  "ARC4Contract",
@@ -39,6 +43,7 @@ __all__ = [
39
43
  "BoxRef",
40
44
  "Bytes",
41
45
  "Contract",
46
+ "FixedBytes",
42
47
  "GlobalState",
43
48
  "ITxnGroupLoader",
44
49
  "ITxnLoader",
@@ -59,6 +64,7 @@ __all__ = [
59
64
  "gtxn",
60
65
  "itxn",
61
66
  "logicsig",
67
+ "public",
62
68
  "subroutine",
63
69
  "uenumerate",
64
70
  "urange",
@@ -12,7 +12,7 @@ import _algopy_testing
12
12
  from _algopy_testing.constants import ALWAYS_APPROVE_TEAL_PROGRAM, ARC4_RETURN_PREFIX
13
13
  from _algopy_testing.context_helpers import lazy_context
14
14
  from _algopy_testing.enums import OnCompleteAction
15
- from _algopy_testing.primitives import BigUInt, Bytes, String, UInt64
15
+ from _algopy_testing.primitives import BigUInt, Bytes, FixedBytes, String, UInt64
16
16
 
17
17
  _P = typing.ParamSpec("_P")
18
18
  _R = typing.TypeVar("_R")
@@ -418,6 +418,8 @@ def _type_to_arc4( # noqa: PLR0912 PLR0911
418
418
  return "uint512"
419
419
  if issubclass(annotation, Bytes):
420
420
  return "byte[]"
421
+ if issubclass(annotation, FixedBytes):
422
+ return f"byte[{annotation._length}]"
421
423
  if issubclass(annotation, bool):
422
424
  return "bool"
423
425
  raise TypeError(f"type not a valid ARC4 type: {annotation}")
@@ -9,6 +9,7 @@ from _algopy_testing.primitives.array import (
9
9
  )
10
10
  from _algopy_testing.primitives.biguint import BigUInt
11
11
  from _algopy_testing.primitives.bytes import Bytes
12
+ from _algopy_testing.primitives.fixed_bytes import FixedBytes
12
13
  from _algopy_testing.primitives.string import String
13
14
  from _algopy_testing.primitives.uint64 import UInt64
14
15
 
@@ -17,6 +18,7 @@ __all__ = [
17
18
  "BigUInt",
18
19
  "Bytes",
19
20
  "FixedArray",
21
+ "FixedBytes",
20
22
  "ImmutableArray",
21
23
  "ImmutableFixedArray",
22
24
  "ReferenceArray",
@@ -7,6 +7,8 @@ from typing import TYPE_CHECKING
7
7
  if TYPE_CHECKING:
8
8
  from collections.abc import Iterator
9
9
 
10
+ from _algopy_testing.primitives.fixed_bytes import FixedBytes
11
+
10
12
 
11
13
  from itertools import zip_longest
12
14
 
@@ -27,7 +29,7 @@ class Bytes:
27
29
  check_type(value, bytes)
28
30
  self.value = as_bytes(value)
29
31
 
30
- def __contains__(self, item: Bytes | bytes) -> bool:
32
+ def __contains__(self, item: Bytes | FixedBytes | bytes) -> bool: # type: ignore[type-arg]
31
33
  item_bytes = as_bytes(item)
32
34
  return item_bytes in self.value
33
35
 
@@ -43,11 +45,8 @@ class Bytes:
43
45
  def __add__(self, other: Bytes | bytes) -> Bytes:
44
46
  """Concatenate Bytes with another Bytes or bytes literal e.g. `Bytes(b"Hello ")
45
47
  + b"World"`."""
46
- if isinstance(other, Bytes):
47
- return _checked_result(self.value + other.value, "+")
48
- else:
49
- result = self.value + as_bytes(other)
50
- return _checked_result(result, "+")
48
+ result = self.value + as_bytes(other)
49
+ return _checked_result(result, "+")
51
50
 
52
51
  def __radd__(self, other: bytes) -> Bytes:
53
52
  """Concatenate Bytes with another Bytes or bytes literal e.g. `b"Hello " +
@@ -70,7 +69,7 @@ class Bytes:
70
69
  self, index: UInt64 | int | slice
71
70
  ) -> Bytes: # maps to substring/substring3 if slice, extract/extract3 otherwise?
72
71
  """Returns a Bytes containing a single byte if indexed with UInt64 or int
73
- otherwise the substring o bytes described by the slice."""
72
+ otherwise the substring of bytes described by the slice."""
74
73
  if isinstance(index, slice):
75
74
  return Bytes(self.value[index])
76
75
  else:
@@ -181,7 +180,7 @@ def _checked_result(result: bytes, op: str) -> Bytes:
181
180
  """Ensures `result` is a valid Bytes value.
182
181
 
183
182
  Raises:
184
- ArithmeticError: If `result` of `op` is out of bounds
183
+ OverflowError: If `result` of `op` is out of bounds
185
184
  """
186
185
  if len(result) > MAX_BYTES_SIZE:
187
186
  raise OverflowError(f"{op} overflows")