coinex-api 0.0.12__py3-none-any.whl → 0.0.14__py3-none-any.whl

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 (289) hide show
  1. coinex/__init__.py +7 -0
  2. coinex/ccxt/__init__.py +101 -0
  3. coinex/ccxt/abstract/coinex.py +237 -0
  4. coinex/ccxt/async_support/__init__.py +80 -0
  5. coinex/ccxt/async_support/base/__init__.py +1 -0
  6. coinex/ccxt/async_support/base/exchange.py +2100 -0
  7. coinex/ccxt/async_support/base/throttler.py +50 -0
  8. coinex/ccxt/async_support/base/ws/__init__.py +38 -0
  9. coinex/ccxt/async_support/base/ws/aiohttp_client.py +147 -0
  10. coinex/ccxt/async_support/base/ws/cache.py +213 -0
  11. coinex/ccxt/async_support/base/ws/client.py +214 -0
  12. coinex/ccxt/async_support/base/ws/fast_client.py +97 -0
  13. coinex/ccxt/async_support/base/ws/functions.py +59 -0
  14. coinex/ccxt/async_support/base/ws/future.py +69 -0
  15. coinex/ccxt/async_support/base/ws/order_book.py +78 -0
  16. coinex/ccxt/async_support/base/ws/order_book_side.py +174 -0
  17. coinex/ccxt/async_support/coinex.py +5833 -0
  18. coinex/ccxt/base/__init__.py +27 -0
  19. coinex/ccxt/base/decimal_to_precision.py +174 -0
  20. coinex/ccxt/base/errors.py +267 -0
  21. coinex/ccxt/base/exchange.py +6769 -0
  22. coinex/ccxt/base/precise.py +297 -0
  23. coinex/ccxt/base/types.py +577 -0
  24. coinex/ccxt/coinex.py +5832 -0
  25. coinex/ccxt/pro/__init__.py +21 -0
  26. coinex/ccxt/pro/coinex.py +1366 -0
  27. coinex/ccxt/static_dependencies/README.md +1 -0
  28. coinex/ccxt/static_dependencies/__init__.py +1 -0
  29. coinex/ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  30. coinex/ccxt/static_dependencies/ecdsa/_version.py +520 -0
  31. coinex/ccxt/static_dependencies/ecdsa/curves.py +56 -0
  32. coinex/ccxt/static_dependencies/ecdsa/der.py +221 -0
  33. coinex/ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  34. coinex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  35. coinex/ccxt/static_dependencies/ecdsa/keys.py +332 -0
  36. coinex/ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  37. coinex/ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  38. coinex/ccxt/static_dependencies/ecdsa/util.py +266 -0
  39. coinex/ccxt/static_dependencies/ethereum/__init__.py +7 -0
  40. coinex/ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  41. coinex/ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  42. coinex/ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  43. coinex/ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  44. coinex/ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  45. coinex/ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  46. coinex/ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  47. coinex/ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  48. coinex/ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  49. coinex/ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  50. coinex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  51. coinex/ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  52. coinex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  53. coinex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  54. coinex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  55. coinex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  56. coinex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  57. coinex/ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  58. coinex/ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  59. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  60. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  61. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  62. coinex/ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  63. coinex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  64. coinex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  65. coinex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  66. coinex/ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  67. coinex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  68. coinex/ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  69. coinex/ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  70. coinex/ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  71. coinex/ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  72. coinex/ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  73. coinex/ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  74. coinex/ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  75. coinex/ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  76. coinex/ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  77. coinex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  78. coinex/ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  79. coinex/ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  80. coinex/ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  81. coinex/ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  82. coinex/ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  83. coinex/ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  84. coinex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  85. coinex/ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  86. coinex/ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  87. coinex/ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  88. coinex/ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  89. coinex/ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  90. coinex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  91. coinex/ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  92. coinex/ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  93. coinex/ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  94. coinex/ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  95. coinex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  96. coinex/ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  97. coinex/ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  98. coinex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  99. coinex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  100. coinex/ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  101. coinex/ccxt/static_dependencies/keccak/__init__.py +3 -0
  102. coinex/ccxt/static_dependencies/keccak/keccak.py +197 -0
  103. coinex/ccxt/static_dependencies/lark/__init__.py +38 -0
  104. coinex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  105. coinex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  106. coinex/ccxt/static_dependencies/lark/ast_utils.py +59 -0
  107. coinex/ccxt/static_dependencies/lark/common.py +86 -0
  108. coinex/ccxt/static_dependencies/lark/exceptions.py +292 -0
  109. coinex/ccxt/static_dependencies/lark/grammar.py +130 -0
  110. coinex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  111. coinex/ccxt/static_dependencies/lark/grammars/common.lark +59 -0
  112. coinex/ccxt/static_dependencies/lark/grammars/lark.lark +62 -0
  113. coinex/ccxt/static_dependencies/lark/grammars/python.lark +302 -0
  114. coinex/ccxt/static_dependencies/lark/grammars/unicode.lark +7 -0
  115. coinex/ccxt/static_dependencies/lark/indenter.py +143 -0
  116. coinex/ccxt/static_dependencies/lark/lark.py +658 -0
  117. coinex/ccxt/static_dependencies/lark/lexer.py +678 -0
  118. coinex/ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  119. coinex/ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  120. coinex/ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  121. coinex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  122. coinex/ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  123. coinex/ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  124. coinex/ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  125. coinex/ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  126. coinex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  127. coinex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  128. coinex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  129. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  130. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  131. coinex/ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  132. coinex/ccxt/static_dependencies/lark/py.typed +0 -0
  133. coinex/ccxt/static_dependencies/lark/reconstruct.py +107 -0
  134. coinex/ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  135. coinex/ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  136. coinex/ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  137. coinex/ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  138. coinex/ccxt/static_dependencies/lark/tree.py +267 -0
  139. coinex/ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  140. coinex/ccxt/static_dependencies/lark/tree_templates.py +180 -0
  141. coinex/ccxt/static_dependencies/lark/utils.py +343 -0
  142. coinex/ccxt/static_dependencies/lark/visitors.py +596 -0
  143. coinex/ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  144. coinex/ccxt/static_dependencies/marshmallow/base.py +65 -0
  145. coinex/ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  146. coinex/ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  147. coinex/ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  148. coinex/ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  149. coinex/ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  150. coinex/ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  151. coinex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  152. coinex/ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  153. coinex/ccxt/static_dependencies/marshmallow/types.py +12 -0
  154. coinex/ccxt/static_dependencies/marshmallow/utils.py +378 -0
  155. coinex/ccxt/static_dependencies/marshmallow/validate.py +678 -0
  156. coinex/ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  157. coinex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  158. coinex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  159. coinex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  160. coinex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  161. coinex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  162. coinex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  163. coinex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  164. coinex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  165. coinex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  166. coinex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  167. coinex/ccxt/static_dependencies/msgpack/__init__.py +55 -0
  168. coinex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +11 -0
  169. coinex/ccxt/static_dependencies/msgpack/_packer.pyx +374 -0
  170. coinex/ccxt/static_dependencies/msgpack/_unpacker.pyx +547 -0
  171. coinex/ccxt/static_dependencies/msgpack/buff_converter.h +8 -0
  172. coinex/ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  173. coinex/ccxt/static_dependencies/msgpack/ext.py +168 -0
  174. coinex/ccxt/static_dependencies/msgpack/fallback.py +951 -0
  175. coinex/ccxt/static_dependencies/msgpack/pack.h +89 -0
  176. coinex/ccxt/static_dependencies/msgpack/pack_template.h +820 -0
  177. coinex/ccxt/static_dependencies/msgpack/sysdep.h +194 -0
  178. coinex/ccxt/static_dependencies/msgpack/unpack.h +391 -0
  179. coinex/ccxt/static_dependencies/msgpack/unpack_define.h +95 -0
  180. coinex/ccxt/static_dependencies/msgpack/unpack_template.h +464 -0
  181. coinex/ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  182. coinex/ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  183. coinex/ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  184. coinex/ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  185. coinex/ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  186. coinex/ccxt/static_dependencies/parsimonious/utils.py +40 -0
  187. coinex/ccxt/static_dependencies/starknet/__init__.py +0 -0
  188. coinex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +2 -0
  189. coinex/ccxt/static_dependencies/starknet/abi/v0/model.py +44 -0
  190. coinex/ccxt/static_dependencies/starknet/abi/v0/parser.py +216 -0
  191. coinex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +72 -0
  192. coinex/ccxt/static_dependencies/starknet/abi/v0/shape.py +63 -0
  193. coinex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +2 -0
  194. coinex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +14 -0
  195. coinex/ccxt/static_dependencies/starknet/abi/v1/model.py +39 -0
  196. coinex/ccxt/static_dependencies/starknet/abi/v1/parser.py +220 -0
  197. coinex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +179 -0
  198. coinex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +66 -0
  199. coinex/ccxt/static_dependencies/starknet/abi/v1/shape.py +47 -0
  200. coinex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +2 -0
  201. coinex/ccxt/static_dependencies/starknet/abi/v2/model.py +89 -0
  202. coinex/ccxt/static_dependencies/starknet/abi/v2/parser.py +293 -0
  203. coinex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +192 -0
  204. coinex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +132 -0
  205. coinex/ccxt/static_dependencies/starknet/abi/v2/shape.py +107 -0
  206. coinex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  207. coinex/ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  208. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  209. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  210. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  211. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  212. coinex/ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  213. coinex/ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  214. coinex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  215. coinex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  216. coinex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  217. coinex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  218. coinex/ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  219. coinex/ccxt/static_dependencies/starknet/common.py +15 -0
  220. coinex/ccxt/static_dependencies/starknet/constants.py +39 -0
  221. coinex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  222. coinex/ccxt/static_dependencies/starknet/hash/address.py +79 -0
  223. coinex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  224. coinex/ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  225. coinex/ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  226. coinex/ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  227. coinex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  228. coinex/ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  229. coinex/ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  230. coinex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  231. coinex/ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  232. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  233. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  234. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  235. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  236. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  237. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  238. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  239. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  240. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  241. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  242. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  243. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  244. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  245. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  246. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  247. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  248. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  249. coinex/ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  250. coinex/ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  251. coinex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  252. coinex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  253. coinex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  254. coinex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  255. coinex/ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  256. coinex/ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  257. coinex/ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  258. coinex/ccxt/static_dependencies/starkware/__init__.py +0 -0
  259. coinex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  260. coinex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  261. coinex/ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  262. coinex/ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  263. coinex/ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  264. coinex/ccxt/static_dependencies/sympy/__init__.py +0 -0
  265. coinex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  266. coinex/ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  267. coinex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  268. coinex/ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  269. coinex/ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  270. coinex/ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  271. coinex/ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  272. coinex/ccxt/static_dependencies/toolz/__init__.py +26 -0
  273. coinex/ccxt/static_dependencies/toolz/_signatures.py +784 -0
  274. coinex/ccxt/static_dependencies/toolz/_version.py +520 -0
  275. coinex/ccxt/static_dependencies/toolz/compatibility.py +30 -0
  276. coinex/ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  277. coinex/ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  278. coinex/ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  279. coinex/ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  280. coinex/ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  281. coinex/ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  282. coinex/ccxt/static_dependencies/toolz/recipes.py +46 -0
  283. coinex/ccxt/static_dependencies/toolz/utils.py +9 -0
  284. coinex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  285. coinex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  286. {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/METADATA +1 -1
  287. coinex_api-0.0.14.dist-info/RECORD +288 -0
  288. coinex_api-0.0.12.dist-info/RECORD +0 -3
  289. {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/WHEEL +0 -0
@@ -0,0 +1,643 @@
1
+ import abc
2
+ import copy
3
+ import functools
4
+ from typing import (
5
+ Any,
6
+ Callable,
7
+ Type,
8
+ Union,
9
+ )
10
+
11
+ from ..typing import (
12
+ abi,
13
+ )
14
+
15
+ from . import (
16
+ decoding,
17
+ encoding,
18
+ exceptions,
19
+ grammar,
20
+ )
21
+ from .base import (
22
+ BaseCoder,
23
+ )
24
+ from .exceptions import (
25
+ ABITypeError,
26
+ MultipleEntriesFound,
27
+ NoEntriesFound,
28
+ )
29
+
30
+ Lookup = Union[abi.TypeStr, Callable[[abi.TypeStr], bool]]
31
+
32
+ EncoderCallable = Callable[[Any], bytes]
33
+ DecoderCallable = Callable[[decoding.ContextFramesBytesIO], Any]
34
+
35
+ Encoder = Union[EncoderCallable, Type[encoding.BaseEncoder]]
36
+ Decoder = Union[DecoderCallable, Type[decoding.BaseDecoder]]
37
+
38
+
39
+ class Copyable(abc.ABC):
40
+ @abc.abstractmethod
41
+ def copy(self):
42
+ pass
43
+
44
+ def __copy__(self):
45
+ return self.copy()
46
+
47
+ def __deepcopy__(self, *args):
48
+ return self.copy()
49
+
50
+
51
+ class PredicateMapping(Copyable):
52
+ """
53
+ Acts as a mapping from predicate functions to values. Values are retrieved
54
+ when their corresponding predicate matches a given input. Predicates can
55
+ also be labeled to facilitate removal from the mapping.
56
+ """
57
+
58
+ def __init__(self, name):
59
+ self._name = name
60
+ self._values = {}
61
+ self._labeled_predicates = {}
62
+
63
+ def add(self, predicate, value, label=None):
64
+ if predicate in self._values:
65
+ raise ValueError(
66
+ "Matcher {} already exists in {}".format(
67
+ repr(predicate),
68
+ self._name,
69
+ )
70
+ )
71
+
72
+ if label is not None:
73
+ if label in self._labeled_predicates:
74
+ raise ValueError(
75
+ "Matcher {} with label '{}' already exists in {}".format(
76
+ repr(predicate),
77
+ label,
78
+ self._name,
79
+ ),
80
+ )
81
+
82
+ self._labeled_predicates[label] = predicate
83
+
84
+ self._values[predicate] = value
85
+
86
+ def find(self, type_str):
87
+ results = tuple(
88
+ (predicate, value)
89
+ for predicate, value in self._values.items()
90
+ if predicate(type_str)
91
+ )
92
+
93
+ if len(results) == 0:
94
+ raise NoEntriesFound(
95
+ "No matching entries for '{}' in {}".format(
96
+ type_str,
97
+ self._name,
98
+ )
99
+ )
100
+
101
+ predicates, values = tuple(zip(*results))
102
+
103
+ if len(results) > 1:
104
+ predicate_reprs = ", ".join(map(repr, predicates))
105
+ raise MultipleEntriesFound(
106
+ f"Multiple matching entries for '{type_str}' in {self._name}: "
107
+ f"{predicate_reprs}. This occurs when two registrations match the "
108
+ "same type string. You may need to delete one of the "
109
+ "registrations or modify its matching behavior to ensure it "
110
+ 'doesn\'t collide with other registrations. See the "Registry" '
111
+ "documentation for more information."
112
+ )
113
+
114
+ return values[0]
115
+
116
+ def remove_by_equality(self, predicate):
117
+ # Delete the predicate mapping to the previously stored value
118
+ try:
119
+ del self._values[predicate]
120
+ except KeyError:
121
+ raise KeyError(
122
+ "Matcher {} not found in {}".format(
123
+ repr(predicate),
124
+ self._name,
125
+ )
126
+ )
127
+
128
+ # Delete any label which refers to this predicate
129
+ try:
130
+ label = self._label_for_predicate(predicate)
131
+ except ValueError:
132
+ pass
133
+ else:
134
+ del self._labeled_predicates[label]
135
+
136
+ def _label_for_predicate(self, predicate):
137
+ # Both keys and values in `_labeled_predicates` are unique since the
138
+ # `add` method enforces this
139
+ for key, value in self._labeled_predicates.items():
140
+ if value is predicate:
141
+ return key
142
+
143
+ raise ValueError(
144
+ "Matcher {} not referred to by any label in {}".format(
145
+ repr(predicate),
146
+ self._name,
147
+ )
148
+ )
149
+
150
+ def remove_by_label(self, label):
151
+ try:
152
+ predicate = self._labeled_predicates[label]
153
+ except KeyError:
154
+ raise KeyError("Label '{}' not found in {}".format(label, self._name))
155
+
156
+ del self._labeled_predicates[label]
157
+ del self._values[predicate]
158
+
159
+ def remove(self, predicate_or_label):
160
+ if callable(predicate_or_label):
161
+ self.remove_by_equality(predicate_or_label)
162
+ elif isinstance(predicate_or_label, str):
163
+ self.remove_by_label(predicate_or_label)
164
+ else:
165
+ raise TypeError(
166
+ "Key to be removed must be callable or string: got {}".format(
167
+ type(predicate_or_label),
168
+ )
169
+ )
170
+
171
+ def copy(self):
172
+ cpy = type(self)(self._name)
173
+
174
+ cpy._values = copy.copy(self._values)
175
+ cpy._labeled_predicates = copy.copy(self._labeled_predicates)
176
+
177
+ return cpy
178
+
179
+
180
+ class Predicate:
181
+ """
182
+ Represents a predicate function to be used for type matching in
183
+ ``ABIRegistry``.
184
+ """
185
+
186
+ __slots__ = tuple()
187
+
188
+ def __call__(self, *args, **kwargs): # pragma: no cover
189
+ raise NotImplementedError("Must implement `__call__`")
190
+
191
+ def __str__(self): # pragma: no cover
192
+ raise NotImplementedError("Must implement `__str__`")
193
+
194
+ def __repr__(self):
195
+ return "<{} {}>".format(type(self).__name__, self)
196
+
197
+ def __iter__(self):
198
+ for attr in self.__slots__:
199
+ yield getattr(self, attr)
200
+
201
+ def __hash__(self):
202
+ return hash(tuple(self))
203
+
204
+ def __eq__(self, other):
205
+ return type(self) is type(other) and tuple(self) == tuple(other)
206
+
207
+
208
+ class Equals(Predicate):
209
+ """
210
+ A predicate that matches any input equal to `value`.
211
+ """
212
+
213
+ __slots__ = ("value",)
214
+
215
+ def __init__(self, value):
216
+ self.value = value
217
+
218
+ def __call__(self, other):
219
+ return self.value == other
220
+
221
+ def __str__(self):
222
+ return "(== {})".format(repr(self.value))
223
+
224
+
225
+ class BaseEquals(Predicate):
226
+ """
227
+ A predicate that matches a basic type string with a base component equal to
228
+ `value` and no array component. If `with_sub` is `True`, the type string
229
+ must have a sub component to match. If `with_sub` is `False`, the type
230
+ string must *not* have a sub component to match. If `with_sub` is None,
231
+ the type string's sub component is ignored.
232
+ """
233
+
234
+ __slots__ = ("base", "with_sub")
235
+
236
+ def __init__(self, base, *, with_sub=None):
237
+ self.base = base
238
+ self.with_sub = with_sub
239
+
240
+ def __call__(self, type_str):
241
+ try:
242
+ abi_type = grammar.parse(type_str)
243
+ except exceptions.ParseError:
244
+ return False
245
+
246
+ if isinstance(abi_type, grammar.BasicType):
247
+ if abi_type.arrlist is not None:
248
+ return False
249
+
250
+ if self.with_sub is not None:
251
+ if self.with_sub and abi_type.sub is None:
252
+ return False
253
+ if not self.with_sub and abi_type.sub is not None:
254
+ return False
255
+
256
+ return abi_type.base == self.base
257
+
258
+ # We'd reach this point if `type_str` did not contain a basic type
259
+ # e.g. if it contained a tuple type
260
+ return False
261
+
262
+ def __str__(self):
263
+ return "(base == {}{})".format(
264
+ repr(self.base),
265
+ ""
266
+ if self.with_sub is None
267
+ else (" and sub is not None" if self.with_sub else " and sub is None"),
268
+ )
269
+
270
+
271
+ def has_arrlist(type_str):
272
+ """
273
+ A predicate that matches a type string with an array dimension list.
274
+ """
275
+ try:
276
+ abi_type = grammar.parse(type_str)
277
+ except exceptions.ParseError:
278
+ return False
279
+
280
+ return abi_type.arrlist is not None
281
+
282
+
283
+ def is_base_tuple(type_str):
284
+ """
285
+ A predicate that matches a tuple type with no array dimension list.
286
+ """
287
+ try:
288
+ abi_type = grammar.parse(type_str)
289
+ except exceptions.ParseError:
290
+ return False
291
+
292
+ return isinstance(abi_type, grammar.TupleType) and abi_type.arrlist is None
293
+
294
+
295
+ def _clear_encoder_cache(old_method):
296
+ @functools.wraps(old_method)
297
+ def new_method(self, *args, **kwargs):
298
+ self.get_encoder.cache_clear()
299
+ return old_method(self, *args, **kwargs)
300
+
301
+ return new_method
302
+
303
+
304
+ def _clear_decoder_cache(old_method):
305
+ @functools.wraps(old_method)
306
+ def new_method(self, *args, **kwargs):
307
+ self.get_decoder.cache_clear()
308
+ return old_method(self, *args, **kwargs)
309
+
310
+ return new_method
311
+
312
+
313
+ class BaseRegistry:
314
+ @staticmethod
315
+ def _register(mapping, lookup, value, label=None):
316
+ if callable(lookup):
317
+ mapping.add(lookup, value, label)
318
+ return
319
+
320
+ if isinstance(lookup, str):
321
+ mapping.add(Equals(lookup), value, lookup)
322
+ return
323
+
324
+ raise TypeError(
325
+ "Lookup must be a callable or a value of type `str`: got {}".format(
326
+ repr(lookup),
327
+ )
328
+ )
329
+
330
+ @staticmethod
331
+ def _unregister(mapping, lookup_or_label):
332
+ if callable(lookup_or_label):
333
+ mapping.remove_by_equality(lookup_or_label)
334
+ return
335
+
336
+ if isinstance(lookup_or_label, str):
337
+ mapping.remove_by_label(lookup_or_label)
338
+ return
339
+
340
+ raise TypeError(
341
+ "Lookup/label must be a callable or a value of type `str`: got {}".format(
342
+ repr(lookup_or_label),
343
+ )
344
+ )
345
+
346
+ @staticmethod
347
+ def _get_registration(mapping, type_str):
348
+ try:
349
+ value = mapping.find(type_str)
350
+ except ValueError as e:
351
+ if "No matching" in e.args[0]:
352
+ # If no matches found, attempt to parse in case lack of matches
353
+ # was due to unparsability
354
+ grammar.parse(type_str)
355
+
356
+ raise
357
+
358
+ return value
359
+
360
+
361
+ class ABIRegistry(Copyable, BaseRegistry):
362
+ def __init__(self):
363
+ self._encoders = PredicateMapping("encoder registry")
364
+ self._decoders = PredicateMapping("decoder registry")
365
+
366
+ def _get_registration(self, mapping, type_str):
367
+ coder = super()._get_registration(mapping, type_str)
368
+
369
+ if isinstance(coder, type) and issubclass(coder, BaseCoder):
370
+ return coder.from_type_str(type_str, self)
371
+
372
+ return coder
373
+
374
+ @_clear_encoder_cache
375
+ def register_encoder(
376
+ self, lookup: Lookup, encoder: Encoder, label: str = None
377
+ ) -> None:
378
+ """
379
+ Registers the given ``encoder`` under the given ``lookup``. A unique
380
+ string label may be optionally provided that can be used to refer to
381
+ the registration by name. For more information about arguments, refer
382
+ to :any:`register`.
383
+ """
384
+ self._register(self._encoders, lookup, encoder, label=label)
385
+
386
+ @_clear_encoder_cache
387
+ def unregister_encoder(self, lookup_or_label: Lookup) -> None:
388
+ """
389
+ Unregisters an encoder in the registry with the given lookup or label.
390
+ If ``lookup_or_label`` is a string, the encoder with the label
391
+ ``lookup_or_label`` will be unregistered. If it is an function, the
392
+ encoder with the lookup function ``lookup_or_label`` will be
393
+ unregistered.
394
+ """
395
+ self._unregister(self._encoders, lookup_or_label)
396
+
397
+ @_clear_decoder_cache
398
+ def register_decoder(
399
+ self, lookup: Lookup, decoder: Decoder, label: str = None
400
+ ) -> None:
401
+ """
402
+ Registers the given ``decoder`` under the given ``lookup``. A unique
403
+ string label may be optionally provided that can be used to refer to
404
+ the registration by name. For more information about arguments, refer
405
+ to :any:`register`.
406
+ """
407
+ self._register(self._decoders, lookup, decoder, label=label)
408
+
409
+ @_clear_decoder_cache
410
+ def unregister_decoder(self, lookup_or_label: Lookup) -> None:
411
+ """
412
+ Unregisters a decoder in the registry with the given lookup or label.
413
+ If ``lookup_or_label`` is a string, the decoder with the label
414
+ ``lookup_or_label`` will be unregistered. If it is an function, the
415
+ decoder with the lookup function ``lookup_or_label`` will be
416
+ unregistered.
417
+ """
418
+ self._unregister(self._decoders, lookup_or_label)
419
+
420
+ def register(
421
+ self, lookup: Lookup, encoder: Encoder, decoder: Decoder, label: str = None
422
+ ) -> None:
423
+ """
424
+ Registers the given ``encoder`` and ``decoder`` under the given
425
+ ``lookup``. A unique string label may be optionally provided that can
426
+ be used to refer to the registration by name.
427
+
428
+ :param lookup: A type string or type string matcher function
429
+ (predicate). When the registry is queried with a type string
430
+ ``query`` to determine which encoder or decoder to use, ``query``
431
+ will be checked against every registration in the registry. If a
432
+ registration was created with a type string for ``lookup``, it will
433
+ be considered a match if ``lookup == query``. If a registration
434
+ was created with a matcher function for ``lookup``, it will be
435
+ considered a match if ``lookup(query) is True``. If more than one
436
+ registration is found to be a match, then an exception is raised.
437
+
438
+ :param encoder: An encoder callable or class to use if ``lookup``
439
+ matches a query. If ``encoder`` is a callable, it must accept a
440
+ python value and return a ``bytes`` value. If ``encoder`` is a
441
+ class, it must be a valid subclass of :any:`encoding.BaseEncoder`
442
+ and must also implement the :any:`from_type_str` method on
443
+ :any:`base.BaseCoder`.
444
+
445
+ :param decoder: A decoder callable or class to use if ``lookup``
446
+ matches a query. If ``decoder`` is a callable, it must accept a
447
+ stream-like object of bytes and return a python value. If
448
+ ``decoder`` is a class, it must be a valid subclass of
449
+ :any:`decoding.BaseDecoder` and must also implement the
450
+ :any:`from_type_str` method on :any:`base.BaseCoder`.
451
+
452
+ :param label: An optional label that can be used to refer to this
453
+ registration by name. This label can be used to unregister an
454
+ entry in the registry via the :any:`unregister` method and its
455
+ variants.
456
+ """
457
+ self.register_encoder(lookup, encoder, label=label)
458
+ self.register_decoder(lookup, decoder, label=label)
459
+
460
+ def unregister(self, label: str) -> None:
461
+ """
462
+ Unregisters the entries in the encoder and decoder registries which
463
+ have the label ``label``.
464
+ """
465
+ self.unregister_encoder(label)
466
+ self.unregister_decoder(label)
467
+
468
+ @functools.lru_cache(maxsize=None)
469
+ def get_encoder(self, type_str):
470
+ return self._get_registration(self._encoders, type_str)
471
+
472
+ def has_encoder(self, type_str: abi.TypeStr) -> bool:
473
+ """
474
+ Returns ``True`` if an encoder is found for the given type string
475
+ ``type_str``. Otherwise, returns ``False``. Raises
476
+ :class:`~eth_abi.exceptions.MultipleEntriesFound` if multiple encoders
477
+ are found.
478
+ """
479
+ try:
480
+ self.get_encoder(type_str)
481
+ except (ABITypeError, NoEntriesFound):
482
+ return False
483
+ else:
484
+ return True
485
+
486
+ @functools.lru_cache(maxsize=None)
487
+ def get_decoder(self, type_str):
488
+ return self._get_registration(self._decoders, type_str)
489
+
490
+ def copy(self):
491
+ """
492
+ Copies a registry such that new registrations can be made or existing
493
+ registrations can be unregistered without affecting any instance from
494
+ which a copy was obtained. This is useful if an existing registry
495
+ fulfills most of a user's needs but requires one or two modifications.
496
+ In that case, a copy of that registry can be obtained and the necessary
497
+ changes made without affecting the original registry.
498
+ """
499
+ cpy = type(self)()
500
+
501
+ cpy._encoders = copy.copy(self._encoders)
502
+ cpy._decoders = copy.copy(self._decoders)
503
+
504
+ return cpy
505
+
506
+
507
+ registry = ABIRegistry()
508
+
509
+ registry.register(
510
+ BaseEquals("uint"),
511
+ encoding.UnsignedIntegerEncoder,
512
+ decoding.UnsignedIntegerDecoder,
513
+ label="uint",
514
+ )
515
+ registry.register(
516
+ BaseEquals("int"),
517
+ encoding.SignedIntegerEncoder,
518
+ decoding.SignedIntegerDecoder,
519
+ label="int",
520
+ )
521
+ registry.register(
522
+ BaseEquals("address"),
523
+ encoding.AddressEncoder,
524
+ decoding.AddressDecoder,
525
+ label="address",
526
+ )
527
+ registry.register(
528
+ BaseEquals("bool"),
529
+ encoding.BooleanEncoder,
530
+ decoding.BooleanDecoder,
531
+ label="bool",
532
+ )
533
+ registry.register(
534
+ BaseEquals("ufixed"),
535
+ encoding.UnsignedFixedEncoder,
536
+ decoding.UnsignedFixedDecoder,
537
+ label="ufixed",
538
+ )
539
+ registry.register(
540
+ BaseEquals("fixed"),
541
+ encoding.SignedFixedEncoder,
542
+ decoding.SignedFixedDecoder,
543
+ label="fixed",
544
+ )
545
+ registry.register(
546
+ BaseEquals("bytes", with_sub=True),
547
+ encoding.BytesEncoder,
548
+ decoding.BytesDecoder,
549
+ label="bytes<M>",
550
+ )
551
+ registry.register(
552
+ BaseEquals("bytes", with_sub=False),
553
+ encoding.ByteStringEncoder,
554
+ decoding.ByteStringDecoder,
555
+ label="bytes",
556
+ )
557
+ registry.register(
558
+ BaseEquals("function"),
559
+ encoding.BytesEncoder,
560
+ decoding.BytesDecoder,
561
+ label="function",
562
+ )
563
+ registry.register(
564
+ BaseEquals("string"),
565
+ encoding.TextStringEncoder,
566
+ decoding.StringDecoder,
567
+ label="string",
568
+ )
569
+ registry.register(
570
+ has_arrlist,
571
+ encoding.BaseArrayEncoder,
572
+ decoding.BaseArrayDecoder,
573
+ label="has_arrlist",
574
+ )
575
+ registry.register(
576
+ is_base_tuple,
577
+ encoding.TupleEncoder,
578
+ decoding.TupleDecoder,
579
+ label="is_base_tuple",
580
+ )
581
+
582
+ registry_packed = ABIRegistry()
583
+
584
+ registry_packed.register_encoder(
585
+ BaseEquals("uint"),
586
+ encoding.PackedUnsignedIntegerEncoder,
587
+ label="uint",
588
+ )
589
+ registry_packed.register_encoder(
590
+ BaseEquals("int"),
591
+ encoding.PackedSignedIntegerEncoder,
592
+ label="int",
593
+ )
594
+ registry_packed.register_encoder(
595
+ BaseEquals("address"),
596
+ encoding.PackedAddressEncoder,
597
+ label="address",
598
+ )
599
+ registry_packed.register_encoder(
600
+ BaseEquals("bool"),
601
+ encoding.PackedBooleanEncoder,
602
+ label="bool",
603
+ )
604
+ registry_packed.register_encoder(
605
+ BaseEquals("ufixed"),
606
+ encoding.PackedUnsignedFixedEncoder,
607
+ label="ufixed",
608
+ )
609
+ registry_packed.register_encoder(
610
+ BaseEquals("fixed"),
611
+ encoding.PackedSignedFixedEncoder,
612
+ label="fixed",
613
+ )
614
+ registry_packed.register_encoder(
615
+ BaseEquals("bytes", with_sub=True),
616
+ encoding.PackedBytesEncoder,
617
+ label="bytes<M>",
618
+ )
619
+ registry_packed.register_encoder(
620
+ BaseEquals("bytes", with_sub=False),
621
+ encoding.PackedByteStringEncoder,
622
+ label="bytes",
623
+ )
624
+ registry_packed.register_encoder(
625
+ BaseEquals("function"),
626
+ encoding.PackedBytesEncoder,
627
+ label="function",
628
+ )
629
+ registry_packed.register_encoder(
630
+ BaseEquals("string"),
631
+ encoding.PackedTextStringEncoder,
632
+ label="string",
633
+ )
634
+ registry_packed.register_encoder(
635
+ has_arrlist,
636
+ encoding.PackedArrayEncoder,
637
+ label="has_arrlist",
638
+ )
639
+ registry_packed.register_encoder(
640
+ is_base_tuple,
641
+ encoding.TupleEncoder,
642
+ label="is_base_tuple",
643
+ )
@@ -0,0 +1,3 @@
1
+ from ._strategies import ( # noqa: F401
2
+ get_abi_strategy,
3
+ )