eltdx 3.2.2__tar.gz → 3.2.3__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 (640) hide show
  1. {eltdx-3.2.2 → eltdx-3.2.3}/Cargo.lock +3 -3
  2. {eltdx-3.2.2 → eltdx-3.2.3}/Cargo.toml +1 -1
  3. {eltdx-3.2.2 → eltdx-3.2.3}/PKG-INFO +13 -8
  4. {eltdx-3.2.2 → eltdx-3.2.3}/README.md +12 -7
  5. eltdx-3.2.3/crates/eltdx-protocol/src/commands/delisted_bars.rs +230 -0
  6. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/mod.rs +1 -0
  7. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/request.rs +14 -3
  8. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/response.rs +5 -0
  9. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/request.rs +26 -0
  10. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/response.rs +35 -0
  11. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/API_REFERENCE.md +24 -5
  12. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/ARCHITECTURE.md +2 -2
  13. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/CHANGELOG.md +8 -0
  14. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/COMMANDS_7709.md +1 -0
  15. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/EXAMPLES.md +27 -2
  16. {eltdx-3.2.2 → eltdx-3.2.3}/docs/FIELD_MIGRATION.md +8 -3
  17. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/FIELD_REFERENCE.md +10 -8
  18. {eltdx-3.2.2 → eltdx-3.2.3}/docs/METHOD_REFERENCE.md +27 -7
  19. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/assets/interface-catalog-data.js +19 -5
  20. {eltdx-3.2.2 → eltdx-3.2.3}/docs/assets/interface-catalog.css +29 -0
  21. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/helpers//345/256/214/346/225/264/350/241/214/346/203/205.md +2 -2
  22. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/index.md +1 -1
  23. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/methods/0x0ffc-/350/265/204/351/207/221/346/265/201/345/220/221/346/227/245/346/225/260/346/215/256/346/216/245/345/217/243.md +14 -16
  24. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/methods/7709-K/347/272/277/345/221/250/346/234/237/347/272/277.md +2 -0
  25. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/methods/7709-/345/210/206/347/261/273/350/241/214/346/203/205.md +2 -2
  26. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/methods/7709-/345/242/236/351/207/217/345/210/267/346/226/260/346/216/250/351/200/201/351/230/237/345/210/227.md +1 -1
  27. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/211/271/351/207/217/345/277/253/347/205/247.md +14 -13
  28. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/227/247/347/211/210/346/211/271/351/207/217/350/241/214/346/203/205.md +1 -1
  29. {eltdx-3.2.2/src/eltdx → eltdx-3.2.3}/docs/methods/7709-/346/234/254/345/234/260/345/244/215/346/235/203/347/263/273/346/225/260.md +20 -6
  30. eltdx-3.2.3/docs/methods/7709-/351/200/200/345/270/202K/347/272/277/346/227/245/347/272/277/346/216/245/345/217/243.md +124 -0
  31. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/346/266/250/350/267/214/345/201/234/345/210/227/350/241/250.md +2 -2
  32. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/README.md +1 -0
  33. eltdx-3.2.3/docs/releases/v3.2.3.md +38 -0
  34. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/fixtures/materialize_static_inputs.py +32 -0
  35. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/unified_test.py +1 -1
  36. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/check_release_metadata.py +4 -4
  37. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/check_release_text.py +1 -1
  38. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/_native_models.py +1 -1
  39. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/__init__.py +2 -0
  40. eltdx-3.2.3/src/eltdx/api/delisted_bars.py +131 -0
  41. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/client.py +3 -0
  42. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/API_REFERENCE.md +24 -5
  43. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/ARCHITECTURE.md +2 -2
  44. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/CHANGELOG.md +8 -0
  45. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/COMMANDS_7709.md +1 -0
  46. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/EXAMPLES.md +27 -2
  47. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/FIELD_MIGRATION.md +8 -3
  48. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/FIELD_REFERENCE.md +10 -8
  49. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/METHOD_REFERENCE.md +27 -7
  50. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/assets/interface-catalog-data.js +19 -5
  51. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/assets/interface-catalog.css +29 -0
  52. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/helpers//345/256/214/346/225/264/350/241/214/346/203/205.md +2 -2
  53. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/index.md +1 -1
  54. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/methods/0x0ffc-/350/265/204/351/207/221/346/265/201/345/220/221/346/227/245/346/225/260/346/215/256/346/216/245/345/217/243.md +14 -16
  55. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/methods/7709-K/347/272/277/345/221/250/346/234/237/347/272/277.md +2 -0
  56. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/methods/7709-/345/210/206/347/261/273/350/241/214/346/203/205.md +2 -2
  57. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/methods/7709-/345/242/236/351/207/217/345/210/267/346/226/260/346/216/250/351/200/201/351/230/237/345/210/227.md +1 -1
  58. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/211/271/351/207/217/345/277/253/347/205/247.md +14 -13
  59. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/227/247/347/211/210/346/211/271/351/207/217/350/241/214/346/203/205.md +1 -1
  60. {eltdx-3.2.2 → eltdx-3.2.3/src/eltdx}/docs/methods/7709-/346/234/254/345/234/260/345/244/215/346/235/203/347/263/273/346/225/260.md +20 -6
  61. eltdx-3.2.3/src/eltdx/docs/methods/7709-/351/200/200/345/270/202K/347/272/277/346/227/245/347/272/277/346/216/245/345/217/243.md +124 -0
  62. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/346/266/250/350/267/214/345/201/234/345/210/227/350/241/250.md +2 -2
  63. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/README.md +1 -0
  64. eltdx-3.2.3/src/eltdx/docs/releases/v3.2.3.md +38 -0
  65. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/commands/registry.py +1 -0
  66. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/constants.py +1 -0
  67. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/command_contracts.json +1 -0
  68. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/legacy_test_traceability.json +1 -1
  69. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/public_api.json +8 -0
  70. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/python_test_groups.json +1 -0
  71. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_command_contract_manifest.py +2 -2
  72. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_response_dto_contract.py +1 -0
  73. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_static_fixture_inputs.py +3 -2
  74. eltdx-3.2.3/tests/fixtures/7709/delisted_bars/normal/expected.json +3464 -0
  75. eltdx-3.2.3/tests/fixtures/7709/delisted_bars/normal/metadata.json +110 -0
  76. eltdx-3.2.3/tests/fixtures/7709/delisted_bars/normal/request.bin +0 -0
  77. eltdx-3.2.3/tests/fixtures/7709/delisted_bars/normal/request.json +45 -0
  78. eltdx-3.2.3/tests/fixtures/7709/delisted_bars/normal/response.bin +0 -0
  79. {eltdx-3.2.2 → eltdx-3.2.3}/tests/integration/test_real_hosts.py +3 -0
  80. {eltdx-3.2.2 → eltdx-3.2.3}/tests/native/test_differential.py +2 -2
  81. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_client.py +2 -2
  82. eltdx-3.2.3/tests/test_delisted_bars.py +291 -0
  83. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_pages.py +30 -22
  84. {eltdx-3.2.2 → eltdx-3.2.3}/LICENSE +0 -0
  85. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/Cargo.toml +0 -0
  86. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/auctions.rs +0 -0
  87. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/corporate.rs +0 -0
  88. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/klines.rs +0 -0
  89. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/limits.rs +0 -0
  90. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/minutes.rs +0 -0
  91. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/money_flow.rs +0 -0
  92. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/quotes.rs +0 -0
  93. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/resources.rs +0 -0
  94. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/security.rs +0 -0
  95. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/session.rs +0 -0
  96. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/commands/trades.rs +0 -0
  97. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/error.rs +0 -0
  98. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/frame.rs +0 -0
  99. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/lib.rs +0 -0
  100. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/limits.rs +0 -0
  101. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/round2_tests.rs +0 -0
  102. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-protocol/src/unit.rs +0 -0
  103. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/Cargo.toml +0 -0
  104. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/error.rs +0 -0
  105. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/lib.rs +0 -0
  106. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/protocol.rs +0 -0
  107. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-python/src/transport.rs +0 -0
  108. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/Cargo.toml +0 -0
  109. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/deadline.rs +0 -0
  110. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/diagnostics.rs +0 -0
  111. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/endpoint.rs +0 -0
  112. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/engine.rs +0 -0
  113. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/error.rs +0 -0
  114. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/lib.rs +0 -0
  115. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/loom_tests.rs +0 -0
  116. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/memory.rs +0 -0
  117. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/pin.rs +0 -0
  118. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/push.rs +0 -0
  119. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/request.rs +0 -0
  120. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/slot.rs +0 -0
  121. {eltdx-3.2.2 → eltdx-3.2.3}/crates/eltdx-runtime/src/supervisor.rs +0 -0
  122. {eltdx-3.2.2 → eltdx-3.2.3}/docs/DEBUG_GUIDE.md +0 -0
  123. {eltdx-3.2.2 → eltdx-3.2.3}/docs/F10_7615.md +0 -0
  124. {eltdx-3.2.2 → eltdx-3.2.3}/docs/GITHUB_PAGES.md +0 -0
  125. {eltdx-3.2.2 → eltdx-3.2.3}/docs/HTTP_GATEWAY.md +0 -0
  126. {eltdx-3.2.2 → eltdx-3.2.3}/docs/MCP.md +0 -0
  127. {eltdx-3.2.2 → eltdx-3.2.3}/docs/MIGRATION_FROM_OLD.md +0 -0
  128. {eltdx-3.2.2 → eltdx-3.2.3}/docs/PRODUCT.md +0 -0
  129. {eltdx-3.2.2 → eltdx-3.2.3}/docs/README.md +0 -0
  130. {eltdx-3.2.2 → eltdx-3.2.3}/docs/ROADMAP.md +0 -0
  131. {eltdx-3.2.2 → eltdx-3.2.3}/docs/THREADING_SCALE_PLAN.md +0 -0
  132. {eltdx-3.2.2 → eltdx-3.2.3}/docs/UPDATE_FROM_0_5_1.md +0 -0
  133. {eltdx-3.2.2 → eltdx-3.2.3}/docs/adr/0001-scale-native-engine.md +0 -0
  134. {eltdx-3.2.2 → eltdx-3.2.3}/docs/adr/0002-historical-trade-batch.md +0 -0
  135. {eltdx-3.2.2 → eltdx-3.2.3}/docs/adr/README.md +0 -0
  136. {eltdx-3.2.2 → eltdx-3.2.3}/docs/assets/astlane-sponsor.svg +0 -0
  137. {eltdx-3.2.2 → eltdx-3.2.3}/docs/assets/interface-catalog.js +0 -0
  138. {eltdx-3.2.2 → eltdx-3.2.3}/docs/assets/return-samples.css +0 -0
  139. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers/A/350/202/241/345/270/270/347/224/250/345/260/201/350/243/205.md" +0 -0
  140. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers/README.md +0 -0
  141. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//344/270/252/350/202/241/346/246/202/345/277/265/346/235/277/345/235/227.md" +0 -0
  142. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//344/271/260/345/215/226/345/212/233/351/201/223.md" +0 -0
  143. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//345/256/236/346/227/266/346/246/234/345/215/225.md" +0 -0
  144. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/210/220/344/272/244/345/257/271/346/257/224.md" +0 -0
  145. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/234/200/346/226/260ST/345/210/227/350/241/250.md" +0 -0
  146. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/234/200/346/226/260/345/201/234/347/211/214/345/210/227/350/241/250.md" +0 -0
  147. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/234/200/346/226/260/350/202/241/347/245/250/345/210/227/350/241/250.md" +0 -0
  148. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/235/277/345/235/227/346/210/220/345/210/206/350/202/241/350/241/214/346/203/205.md" +0 -0
  149. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/235/277/345/235/227/350/241/214/346/203/205.md" +0 -0
  150. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/246/202/345/277/265/346/235/277/345/235/227/346/210/220/345/210/206/350/202/241.md" +0 -0
  151. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/257/217/346/227/245/346/266/250/350/267/214/345/201/234/344/273/267.md" +0 -0
  152. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//346/257/217/346/227/245/350/202/241/346/234/254.md" +0 -0
  153. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//347/237/255/347/272/277/346/214/207/346/240/207.md" +0 -0
  154. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//347/253/236/344/273/267/346/225/260/346/215/256.md" +0 -0
  155. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//350/202/241/347/245/250/344/277/241/346/201/257/346/261/207/346/200/273.md" +0 -0
  156. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//350/277/236/346/235/277/345/244/251/346/242/257.md" +0 -0
  157. {eltdx-3.2.2 → eltdx-3.2.3}/docs/helpers//351/242/230/346/235/220/345/274/272/345/272/246/346/216/222/350/241/214.md" +0 -0
  158. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-0925/347/253/236/344/273/267/346/210/220/344/272/244/345/277/253/347/205/247.md" +0 -0
  159. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/344/273/243/347/240/201/346/225/260/351/207/217.md" +0 -0
  160. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/344/273/243/347/240/201/350/241/250.md" +0 -0
  161. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/210/206/346/227/266/345/211/257/345/233/276.md" +0 -0
  162. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/216/206/345/217/2620925/346/255/243/345/274/217/346/222/256/345/220/210.md" +0 -0
  163. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/216/206/345/217/262/346/210/220/344/272/244/346/230/216/347/273/206.md" +0 -0
  164. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/260/217/350/265/260/345/212/277/345/233/276.md" +0 -0
  165. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/275/223/346/227/2450925/346/255/243/345/274/217/346/222/256/345/220/210.md" +0 -0
  166. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/275/223/346/227/245/345/210/206/346/227/266.md" +0 -0
  167. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/275/223/346/227/245/346/210/220/344/272/244/346/230/216/347/273/206.md" +0 -0
  168. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/345/277/203/350/267/263.md" +0 -0
  169. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/214/207/345/256/232/346/227/245/346/234/237/345/216/206/345/217/262/345/210/206/346/227/266.md" +0 -0
  170. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/217/241/346/211/213.md" +0 -0
  171. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/234/215/345/212/241/345/231/250/346/226/207/344/273/266/344/270/213/350/275/275.md" +0 -0
  172. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/234/215/345/212/241/345/231/250/346/226/207/344/273/266/350/257/273/345/217/226.md" +0 -0
  173. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/346/234/215/345/212/241/345/231/250/347/273/237/350/256/241/346/226/207/344/273/266/350/247/243/346/236/220.md" +0 -0
  174. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/347/211/271/346/256/212/345/223/201/347/247/215/346/266/250/350/267/214/345/201/234/351/231/220/345/210/266.md" +0 -0
  175. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/350/202/241/346/234/254/345/217/230/350/277/201GBBQ.md" +0 -0
  176. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/350/264/242/345/212/241/345/237/272/347/241/200/344/277/241/346/201/257.md" +0 -0
  177. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/350/277/221/346/234/237/345/216/206/345/217/262/345/210/206/346/227/266.md" +0 -0
  178. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/7709-/351/233/206/345/220/210/347/253/236/344/273/267/346/230/216/347/273/206.md" +0 -0
  179. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/344/270/252/350/202/241/346/200/273/350/257/204.md" +0 -0
  180. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/344/270/273/350/220/245/346/236/204/346/210/220.md" +0 -0
  181. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/344/274/260/345/200/274/345/270/202/345/234/272/346/225/260/346/215/256.md" +0 -0
  182. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/345/205/254/345/217/270/346/246/202/345/206/265.md" +0 -0
  183. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/345/205/254/345/217/270/350/265/204/350/256/257/347/240/224/346/212/245.md" +0 -0
  184. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/345/210/206/347/272/242/350/236/215/350/265/204.md" +0 -0
  185. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/345/242/236/345/217/221/350/216/267/351/205/215.md" +0 -0
  186. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/345/270/202/345/234/272/350/241/214/344/270/232/346/216/222/345/220/215.md" +0 -0
  187. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/346/226/260/351/227/273/345/205/254/345/221/212/350/267/257/346/274/224.md" +0 -0
  188. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/346/262/252/346/267/261/350/202/241/351/200/232/346/214/201/344/273/223.md" +0 -0
  189. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/347/203/255/347/202/271/351/242/230/346/235/220.md" +0 -0
  190. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/347/233/210/345/210/251/351/242/204/346/265/213.md" +0 -0
  191. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/202/241/344/270/234/345/242/236/345/207/217/346/214/201.md" +0 -0
  192. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/202/241/347/245/250/345/237/272/347/241/200/344/277/241/346/201/257.md" +0 -0
  193. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/257/246/346/203/205/346/255/243/346/226/207.md" +0 -0
  194. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/264/242/345/212/241/346/212/245/350/241/250.md" +0 -0
  195. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/264/242/345/212/241/350/257/212/346/226/255.md" +0 -0
  196. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/350/265/204/346/234/254/350/277/220/344/275/234/346/262/273/347/220/206.md" +0 -0
  197. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/351/200/232/347/224/250Entry/350/260/203/347/224/250.md" +0 -0
  198. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/351/242/230/346/235/220/345/206/205/345/257/271/346/257/224.md" +0 -0
  199. {eltdx-3.2.2 → eltdx-3.2.3}/docs/methods/F10-/351/242/230/346/235/220/346/246/202/345/277/265/350/241/214/346/203/205.md" +0 -0
  200. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.0.1.md +0 -0
  201. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.0.2.md +0 -0
  202. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.1.0.md +0 -0
  203. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.2.0.md +0 -0
  204. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.3.0.md +0 -0
  205. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v1.3.1.md +0 -0
  206. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.0.md +0 -0
  207. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.1.md +0 -0
  208. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.2.md +0 -0
  209. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.3.md +0 -0
  210. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.4.md +0 -0
  211. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v2.0.5.md +0 -0
  212. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.0.md +0 -0
  213. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.1.md +0 -0
  214. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.2.md +0 -0
  215. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.3.md +0 -0
  216. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.4.md +0 -0
  217. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.5.md +0 -0
  218. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.6.md +0 -0
  219. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.7.md +0 -0
  220. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.8.md +0 -0
  221. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.0.9.md +0 -0
  222. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.0.md +0 -0
  223. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.1.md +0 -0
  224. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.2.md +0 -0
  225. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.3.md +0 -0
  226. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.4.md +0 -0
  227. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.5.md +0 -0
  228. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.6.md +0 -0
  229. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.7.md +0 -0
  230. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.8.md +0 -0
  231. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.1.9.md +0 -0
  232. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.2.0.md +0 -0
  233. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.2.1.md +0 -0
  234. {eltdx-3.2.2 → eltdx-3.2.3}/docs/releases/v3.2.2.md +0 -0
  235. {eltdx-3.2.2 → eltdx-3.2.3}/pyproject.toml +0 -0
  236. {eltdx-3.2.2 → eltdx-3.2.3}/rust-toolchain.toml +0 -0
  237. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/README.md +0 -0
  238. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/ci/run_wire_golden.py +0 -0
  239. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/fixtures/canonical.py +0 -0
  240. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/fixtures/differential.py +0 -0
  241. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/fixtures/export_current_golden.py +0 -0
  242. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/package/sync_docs.py +0 -0
  243. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/release/prepare_release_notes.py +0 -0
  244. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/export_auction_925_daily.py +0 -0
  245. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/live_smoke.py +0 -0
  246. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/mcp_stdio_check.py +0 -0
  247. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_codes.py +0 -0
  248. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_f10.py +0 -0
  249. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_kline.py +0 -0
  250. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_minute.py +0 -0
  251. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_trade.py +0 -0
  252. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/smoke/smoke_workday.py +0 -0
  253. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/build_stress_evidence.py +0 -0
  254. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/check_external_evidence.py +0 -0
  255. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/check_native_abi.py +0 -0
  256. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/check_pages_links.py +0 -0
  257. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/dry_run_publish_workflow.py +0 -0
  258. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/index_release_evidence.py +0 -0
  259. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/installed_smoke.py +0 -0
  260. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/run_python_test_group.py +0 -0
  261. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/verify_release_artifacts.py +0 -0
  262. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/verify_sdist.py +0 -0
  263. {eltdx-3.2.2 → eltdx-3.2.3}/scripts/verification/verify_wheel_matrix.py +0 -0
  264. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/__init__.py +0 -0
  265. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/_native_abi.py +0 -0
  266. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/auctions.py +0 -0
  267. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/bars.py +0 -0
  268. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/base.py +0 -0
  269. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/codes.py +0 -0
  270. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/corporate.py +0 -0
  271. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/health.py +0 -0
  272. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/limits.py +0 -0
  273. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/minutes.py +0 -0
  274. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/money_flow.py +0 -0
  275. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/quotes.py +0 -0
  276. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/resources.py +0 -0
  277. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/session.py +0 -0
  278. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/api/trades.py +0 -0
  279. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/cli.py +0 -0
  280. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/DEBUG_GUIDE.md +0 -0
  281. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/F10_7615.md +0 -0
  282. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/GITHUB_PAGES.md +0 -0
  283. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/HTTP_GATEWAY.md +0 -0
  284. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/MCP.md +0 -0
  285. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/MIGRATION_FROM_OLD.md +0 -0
  286. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/PRODUCT.md +0 -0
  287. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/README.md +0 -0
  288. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/ROADMAP.md +0 -0
  289. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/THREADING_SCALE_PLAN.md +0 -0
  290. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/UPDATE_FROM_0_5_1.md +0 -0
  291. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/adr/0001-scale-native-engine.md +0 -0
  292. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/adr/0002-historical-trade-batch.md +0 -0
  293. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/adr/README.md +0 -0
  294. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/assets/astlane-sponsor.svg +0 -0
  295. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/assets/interface-catalog.js +0 -0
  296. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/assets/return-samples.css +0 -0
  297. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers/A/350/202/241/345/270/270/347/224/250/345/260/201/350/243/205.md" +0 -0
  298. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers/README.md +0 -0
  299. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//344/270/252/350/202/241/346/246/202/345/277/265/346/235/277/345/235/227.md" +0 -0
  300. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//344/271/260/345/215/226/345/212/233/351/201/223.md" +0 -0
  301. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//345/256/236/346/227/266/346/246/234/345/215/225.md" +0 -0
  302. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/210/220/344/272/244/345/257/271/346/257/224.md" +0 -0
  303. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/234/200/346/226/260ST/345/210/227/350/241/250.md" +0 -0
  304. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/234/200/346/226/260/345/201/234/347/211/214/345/210/227/350/241/250.md" +0 -0
  305. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/234/200/346/226/260/350/202/241/347/245/250/345/210/227/350/241/250.md" +0 -0
  306. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/235/277/345/235/227/346/210/220/345/210/206/350/202/241/350/241/214/346/203/205.md" +0 -0
  307. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/235/277/345/235/227/350/241/214/346/203/205.md" +0 -0
  308. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/246/202/345/277/265/346/235/277/345/235/227/346/210/220/345/210/206/350/202/241.md" +0 -0
  309. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/257/217/346/227/245/346/266/250/350/267/214/345/201/234/344/273/267.md" +0 -0
  310. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//346/257/217/346/227/245/350/202/241/346/234/254.md" +0 -0
  311. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//347/237/255/347/272/277/346/214/207/346/240/207.md" +0 -0
  312. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//347/253/236/344/273/267/346/225/260/346/215/256.md" +0 -0
  313. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//350/202/241/347/245/250/344/277/241/346/201/257/346/261/207/346/200/273.md" +0 -0
  314. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//350/277/236/346/235/277/345/244/251/346/242/257.md" +0 -0
  315. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/helpers//351/242/230/346/235/220/345/274/272/345/272/246/346/216/222/350/241/214.md" +0 -0
  316. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-0925/347/253/236/344/273/267/346/210/220/344/272/244/345/277/253/347/205/247.md" +0 -0
  317. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/344/273/243/347/240/201/346/225/260/351/207/217.md" +0 -0
  318. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/344/273/243/347/240/201/350/241/250.md" +0 -0
  319. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/210/206/346/227/266/345/211/257/345/233/276.md" +0 -0
  320. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/216/206/345/217/2620925/346/255/243/345/274/217/346/222/256/345/220/210.md" +0 -0
  321. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/216/206/345/217/262/346/210/220/344/272/244/346/230/216/347/273/206.md" +0 -0
  322. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/260/217/350/265/260/345/212/277/345/233/276.md" +0 -0
  323. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/275/223/346/227/2450925/346/255/243/345/274/217/346/222/256/345/220/210.md" +0 -0
  324. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/275/223/346/227/245/345/210/206/346/227/266.md" +0 -0
  325. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/275/223/346/227/245/346/210/220/344/272/244/346/230/216/347/273/206.md" +0 -0
  326. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/345/277/203/350/267/263.md" +0 -0
  327. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/214/207/345/256/232/346/227/245/346/234/237/345/216/206/345/217/262/345/210/206/346/227/266.md" +0 -0
  328. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/217/241/346/211/213.md" +0 -0
  329. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/234/215/345/212/241/345/231/250/346/226/207/344/273/266/344/270/213/350/275/275.md" +0 -0
  330. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/234/215/345/212/241/345/231/250/346/226/207/344/273/266/350/257/273/345/217/226.md" +0 -0
  331. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/346/234/215/345/212/241/345/231/250/347/273/237/350/256/241/346/226/207/344/273/266/350/247/243/346/236/220.md" +0 -0
  332. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/347/211/271/346/256/212/345/223/201/347/247/215/346/266/250/350/267/214/345/201/234/351/231/220/345/210/266.md" +0 -0
  333. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/350/202/241/346/234/254/345/217/230/350/277/201GBBQ.md" +0 -0
  334. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/350/264/242/345/212/241/345/237/272/347/241/200/344/277/241/346/201/257.md" +0 -0
  335. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/350/277/221/346/234/237/345/216/206/345/217/262/345/210/206/346/227/266.md" +0 -0
  336. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/7709-/351/233/206/345/220/210/347/253/236/344/273/267/346/230/216/347/273/206.md" +0 -0
  337. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/344/270/252/350/202/241/346/200/273/350/257/204.md" +0 -0
  338. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/344/270/273/350/220/245/346/236/204/346/210/220.md" +0 -0
  339. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/344/274/260/345/200/274/345/270/202/345/234/272/346/225/260/346/215/256.md" +0 -0
  340. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/345/205/254/345/217/270/346/246/202/345/206/265.md" +0 -0
  341. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/345/205/254/345/217/270/350/265/204/350/256/257/347/240/224/346/212/245.md" +0 -0
  342. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/345/210/206/347/272/242/350/236/215/350/265/204.md" +0 -0
  343. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/345/242/236/345/217/221/350/216/267/351/205/215.md" +0 -0
  344. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/345/270/202/345/234/272/350/241/214/344/270/232/346/216/222/345/220/215.md" +0 -0
  345. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/346/226/260/351/227/273/345/205/254/345/221/212/350/267/257/346/274/224.md" +0 -0
  346. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/346/262/252/346/267/261/350/202/241/351/200/232/346/214/201/344/273/223.md" +0 -0
  347. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/347/203/255/347/202/271/351/242/230/346/235/220.md" +0 -0
  348. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/347/233/210/345/210/251/351/242/204/346/265/213.md" +0 -0
  349. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/202/241/344/270/234/345/242/236/345/207/217/346/214/201.md" +0 -0
  350. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/202/241/347/245/250/345/237/272/347/241/200/344/277/241/346/201/257.md" +0 -0
  351. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/257/246/346/203/205/346/255/243/346/226/207.md" +0 -0
  352. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/264/242/345/212/241/346/212/245/350/241/250.md" +0 -0
  353. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/264/242/345/212/241/350/257/212/346/226/255.md" +0 -0
  354. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/350/265/204/346/234/254/350/277/220/344/275/234/346/262/273/347/220/206.md" +0 -0
  355. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/351/200/232/347/224/250Entry/350/260/203/347/224/250.md" +0 -0
  356. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/351/242/230/346/235/220/345/206/205/345/257/271/346/257/224.md" +0 -0
  357. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/methods/F10-/351/242/230/346/235/220/346/246/202/345/277/265/350/241/214/346/203/205.md" +0 -0
  358. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.0.1.md +0 -0
  359. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.0.2.md +0 -0
  360. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.1.0.md +0 -0
  361. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.2.0.md +0 -0
  362. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.3.0.md +0 -0
  363. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v1.3.1.md +0 -0
  364. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.0.md +0 -0
  365. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.1.md +0 -0
  366. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.2.md +0 -0
  367. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.3.md +0 -0
  368. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.4.md +0 -0
  369. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v2.0.5.md +0 -0
  370. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.0.md +0 -0
  371. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.1.md +0 -0
  372. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.2.md +0 -0
  373. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.3.md +0 -0
  374. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.4.md +0 -0
  375. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.5.md +0 -0
  376. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.6.md +0 -0
  377. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.7.md +0 -0
  378. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.8.md +0 -0
  379. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.0.9.md +0 -0
  380. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.0.md +0 -0
  381. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.1.md +0 -0
  382. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.2.md +0 -0
  383. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.3.md +0 -0
  384. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.4.md +0 -0
  385. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.5.md +0 -0
  386. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.6.md +0 -0
  387. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.7.md +0 -0
  388. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.8.md +0 -0
  389. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.1.9.md +0 -0
  390. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.2.0.md +0 -0
  391. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.2.1.md +0 -0
  392. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/docs/releases/v3.2.2.md +0 -0
  393. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/equity.py +0 -0
  394. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/exceptions.py +0 -0
  395. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/f10/__init__.py +0 -0
  396. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/f10/_http.py +0 -0
  397. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/f10/client.py +0 -0
  398. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/f10/models.py +0 -0
  399. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/f10_smoke.py +0 -0
  400. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/helpers/__init__.py +0 -0
  401. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/helpers/boards.py +0 -0
  402. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/helpers/core.py +0 -0
  403. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/helpers/shortline.py +0 -0
  404. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/hosts.py +0 -0
  405. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/http_server.py +0 -0
  406. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/mcp.py +0 -0
  407. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/__init__.py +0 -0
  408. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/auction.py +0 -0
  409. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/corporate.py +0 -0
  410. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/kline.py +0 -0
  411. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/limit.py +0 -0
  412. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/minute.py +0 -0
  413. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/money_flow.py +0 -0
  414. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/quote.py +0 -0
  415. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/resource.py +0 -0
  416. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/response.py +0 -0
  417. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/security.py +0 -0
  418. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/session.py +0 -0
  419. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/trade.py +0 -0
  420. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/models/trade_batch.py +0 -0
  421. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/money_flow_servers.json +0 -0
  422. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/__init__.py +0 -0
  423. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/codec.py +0 -0
  424. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/commands/__init__.py +0 -0
  425. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/commands/codec.py +0 -0
  426. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/frame.py +0 -0
  427. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/protocol/unit.py +0 -0
  428. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/py.typed +0 -0
  429. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/serialization.py +0 -0
  430. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/smoke.py +0 -0
  431. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/stats.py +0 -0
  432. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/tdx_server.json +0 -0
  433. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/__init__.py +0 -0
  434. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/_config.py +0 -0
  435. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/actor.py +0 -0
  436. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/base.py +0 -0
  437. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/memory.py +0 -0
  438. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/native.py +0 -0
  439. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/pool.py +0 -0
  440. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/transport/socket.py +0 -0
  441. {eltdx-3.2.2 → eltdx-3.2.3}/src/eltdx/workday.py +0 -0
  442. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/dataclasses_exceptions.json +0 -0
  443. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/manifests/runtime_surfaces.json +0 -0
  444. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_dataclasses_exceptions.py +0 -0
  445. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_legacy_test_traceability_contract.py +0 -0
  446. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_native_errors_contract.py +0 -0
  447. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_native_models_contract.py +0 -0
  448. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_native_protocol_facade_contract.py +0 -0
  449. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_public_api_contract.py +0 -0
  450. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_python_test_groups.py +0 -0
  451. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_release_evidence_index.py +0 -0
  452. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_runtime_memory_bounds.py +0 -0
  453. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_runtime_surfaces_contract.py +0 -0
  454. {eltdx-3.2.2 → eltdx-3.2.3}/tests/contracts/test_unified_test_plan.py +0 -0
  455. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/auction_series/normal/expected.json +0 -0
  456. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/auction_series/normal/metadata.json +0 -0
  457. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/auction_series/normal/request.bin +0 -0
  458. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/auction_series/normal/request.json +0 -0
  459. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/auction_series/normal/response.bin +0 -0
  460. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/canonical_fixture.schema.json +0 -0
  461. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/capital_changes/normal/expected.json +0 -0
  462. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/capital_changes/normal/metadata.json +0 -0
  463. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/capital_changes/normal/request.bin +0 -0
  464. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/capital_changes/normal/request.json +0 -0
  465. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/capital_changes/normal/response.bin +0 -0
  466. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/normal/expected.json +0 -0
  467. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/normal/metadata.json +0 -0
  468. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/normal/request.bin +0 -0
  469. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/normal/request.json +0 -0
  470. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/normal/response.bin +0 -0
  471. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/trailing_byte/expected.json +0 -0
  472. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/trailing_byte/metadata.json +0 -0
  473. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/trailing_byte/request.bin +0 -0
  474. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/trailing_byte/request.json +0 -0
  475. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/category_quotes/trailing_byte/response.bin +0 -0
  476. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/max_chunk_empty/expected.json +0 -0
  477. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/max_chunk_empty/metadata.json +0 -0
  478. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/max_chunk_empty/request.bin +0 -0
  479. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/max_chunk_empty/request.json +0 -0
  480. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/max_chunk_empty/response.bin +0 -0
  481. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/normal/expected.json +0 -0
  482. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/normal/metadata.json +0 -0
  483. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/normal/request.bin +0 -0
  484. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/normal/request.json +0 -0
  485. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/file_content/normal/response.bin +0 -0
  486. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/finance_batch/normal/expected.json +0 -0
  487. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/finance_batch/normal/metadata.json +0 -0
  488. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/finance_batch/normal/request.bin +0 -0
  489. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/finance_batch/normal/request.json +0 -0
  490. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/finance_batch/normal/response.bin +0 -0
  491. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/handshake/normal/expected.json +0 -0
  492. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/handshake/normal/metadata.json +0 -0
  493. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/handshake/normal/request.bin +0 -0
  494. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/handshake/normal/request.json +0 -0
  495. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/handshake/normal/response.bin +0 -0
  496. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/bad_compression/expected.json +0 -0
  497. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/bad_compression/metadata.json +0 -0
  498. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/bad_compression/request.bin +0 -0
  499. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/bad_compression/request.json +0 -0
  500. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/bad_compression/response.bin +0 -0
  501. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/compressed/expected.json +0 -0
  502. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/compressed/metadata.json +0 -0
  503. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/compressed/request.bin +0 -0
  504. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/compressed/request.json +0 -0
  505. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/compressed/response.bin +0 -0
  506. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/normal/expected.json +0 -0
  507. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/normal/metadata.json +0 -0
  508. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/normal/request.bin +0 -0
  509. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/normal/request.json +0 -0
  510. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/normal/response.bin +0 -0
  511. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/stale_message/expected.json +0 -0
  512. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/stale_message/metadata.json +0 -0
  513. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/stale_message/request.bin +0 -0
  514. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/stale_message/request.json +0 -0
  515. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/heartbeat/stale_message/response.bin +0 -0
  516. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_intraday/normal/expected.json +0 -0
  517. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_intraday/normal/metadata.json +0 -0
  518. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_intraday/normal/request.bin +0 -0
  519. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_intraday/normal/request.json +0 -0
  520. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_intraday/normal/response.bin +0 -0
  521. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_ticks/normal/expected.json +0 -0
  522. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_ticks/normal/metadata.json +0 -0
  523. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_ticks/normal/request.bin +0 -0
  524. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_ticks/normal/request.json +0 -0
  525. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/historical_ticks/normal/response.bin +0 -0
  526. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/intraday_aux/normal/expected.json +0 -0
  527. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/intraday_aux/normal/metadata.json +0 -0
  528. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/intraday_aux/normal/request.bin +0 -0
  529. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/intraday_aux/normal/request.json +0 -0
  530. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/intraday_aux/normal/response.bin +0 -0
  531. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/include_raw_false/expected.json +0 -0
  532. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/include_raw_false/metadata.json +0 -0
  533. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/include_raw_false/request.bin +0 -0
  534. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/include_raw_false/request.json +0 -0
  535. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/include_raw_false/response.bin +0 -0
  536. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/max_page_empty/expected.json +0 -0
  537. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/max_page_empty/metadata.json +0 -0
  538. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/max_page_empty/request.bin +0 -0
  539. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/max_page_empty/request.json +0 -0
  540. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/max_page_empty/response.bin +0 -0
  541. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/normal/expected.json +0 -0
  542. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/normal/metadata.json +0 -0
  543. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/normal/request.bin +0 -0
  544. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/normal/request.json +0 -0
  545. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/klines/normal/response.bin +0 -0
  546. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/legacy_quotes/normal/expected.json +0 -0
  547. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/legacy_quotes/normal/metadata.json +0 -0
  548. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/legacy_quotes/normal/request.bin +0 -0
  549. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/legacy_quotes/normal/request.json +0 -0
  550. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/legacy_quotes/normal/response.bin +0 -0
  551. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/include_raw_false/expected.json +0 -0
  552. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/include_raw_false/metadata.json +0 -0
  553. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/include_raw_false/request.bin +0 -0
  554. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/include_raw_false/request.json +0 -0
  555. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/include_raw_false/response.bin +0 -0
  556. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/normal/expected.json +0 -0
  557. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/normal/metadata.json +0 -0
  558. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/normal/request.bin +0 -0
  559. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/normal/request.json +0 -0
  560. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/recent_intraday/normal/response.bin +0 -0
  561. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/refresh_stream/normal/expected.json +0 -0
  562. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/refresh_stream/normal/metadata.json +0 -0
  563. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/refresh_stream/normal/request.bin +0 -0
  564. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/refresh_stream/normal/request.json +0 -0
  565. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/refresh_stream/normal/response.bin +0 -0
  566. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_count/normal/expected.json +0 -0
  567. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_count/normal/metadata.json +0 -0
  568. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_count/normal/request.bin +0 -0
  569. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_count/normal/request.json +0 -0
  570. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_count/normal/response.bin +0 -0
  571. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/bj_empty/expected.json +0 -0
  572. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/bj_empty/metadata.json +0 -0
  573. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/bj_empty/request.bin +0 -0
  574. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/bj_empty/request.json +0 -0
  575. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/bj_empty/response.bin +0 -0
  576. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/normal/expected.json +0 -0
  577. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/normal/metadata.json +0 -0
  578. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/normal/request.bin +0 -0
  579. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/normal/request.json +0 -0
  580. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/normal/response.bin +0 -0
  581. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/sh_empty/expected.json +0 -0
  582. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/sh_empty/metadata.json +0 -0
  583. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/sh_empty/request.bin +0 -0
  584. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/sh_empty/request.json +0 -0
  585. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/security_list/sh_empty/response.bin +0 -0
  586. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/etf_index_empty/expected.json +0 -0
  587. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/etf_index_empty/metadata.json +0 -0
  588. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/etf_index_empty/request.bin +0 -0
  589. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/etf_index_empty/request.json +0 -0
  590. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/etf_index_empty/response.bin +0 -0
  591. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/normal/expected.json +0 -0
  592. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/normal/metadata.json +0 -0
  593. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/normal/request.bin +0 -0
  594. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/normal/request.json +0 -0
  595. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/normal/response.bin +0 -0
  596. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/truncated_record/expected.json +0 -0
  597. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/truncated_record/metadata.json +0 -0
  598. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/truncated_record/request.bin +0 -0
  599. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/truncated_record/request.json +0 -0
  600. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/snapshots/truncated_record/response.bin +0 -0
  601. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/sparkline/normal/expected.json +0 -0
  602. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/sparkline/normal/metadata.json +0 -0
  603. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/sparkline/normal/request.bin +0 -0
  604. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/sparkline/normal/request.json +0 -0
  605. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/sparkline/normal/response.bin +0 -0
  606. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/special_limits/normal/expected.json +0 -0
  607. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/special_limits/normal/metadata.json +0 -0
  608. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/special_limits/normal/request.bin +0 -0
  609. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/special_limits/normal/request.json +0 -0
  610. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/special_limits/normal/response.bin +0 -0
  611. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_intraday/normal/expected.json +0 -0
  612. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_intraday/normal/metadata.json +0 -0
  613. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_intraday/normal/request.bin +0 -0
  614. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_intraday/normal/request.json +0 -0
  615. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_intraday/normal/response.bin +0 -0
  616. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_ticks/normal/expected.json +0 -0
  617. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_ticks/normal/metadata.json +0 -0
  618. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_ticks/normal/request.bin +0 -0
  619. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_ticks/normal/request.json +0 -0
  620. {eltdx-3.2.2 → eltdx-3.2.3}/tests/fixtures/7709/today_ticks/normal/response.bin +0 -0
  621. {eltdx-3.2.2 → eltdx-3.2.3}/tests/integration/loopback_support.py +0 -0
  622. {eltdx-3.2.2 → eltdx-3.2.3}/tests/integration/test_loopback_concurrency.py +0 -0
  623. {eltdx-3.2.2 → eltdx-3.2.3}/tests/integration/test_loopback_faults.py +0 -0
  624. {eltdx-3.2.2 → eltdx-3.2.3}/tests/integration/test_native_transport.py +0 -0
  625. {eltdx-3.2.2 → eltdx-3.2.3}/tests/packaging/test_bytecode_exclusion_contract.py +0 -0
  626. {eltdx-3.2.2 → eltdx-3.2.3}/tests/packaging/test_docs_mirror.py +0 -0
  627. {eltdx-3.2.2 → eltdx-3.2.3}/tests/packaging/test_release_artifacts.py +0 -0
  628. {eltdx-3.2.2 → eltdx-3.2.3}/tests/packaging/test_release_metadata_contract.py +0 -0
  629. {eltdx-3.2.2 → eltdx-3.2.3}/tests/packaging/test_sdist_verification.py +0 -0
  630. {eltdx-3.2.2 → eltdx-3.2.3}/tests/stress/runtime_support.py +0 -0
  631. {eltdx-3.2.2 → eltdx-3.2.3}/tests/stress/test_native_runtime_stress.py +0 -0
  632. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_a_share_helpers.py +0 -0
  633. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_board_helpers.py +0 -0
  634. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_f10.py +0 -0
  635. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_helpers.py +0 -0
  636. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_http_server.py +0 -0
  637. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_mcp.py +0 -0
  638. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_resources.py +0 -0
  639. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_shortline_helpers.py +0 -0
  640. {eltdx-3.2.2 → eltdx-3.2.3}/tests/test_trade_batch.py +0 -0
@@ -77,7 +77,7 @@ dependencies = [
77
77
 
78
78
  [[package]]
79
79
  name = "eltdx-protocol"
80
- version = "3.2.2"
80
+ version = "3.2.3"
81
81
  dependencies = [
82
82
  "bytes",
83
83
  "encoding_rs",
@@ -91,7 +91,7 @@ dependencies = [
91
91
 
92
92
  [[package]]
93
93
  name = "eltdx-python"
94
- version = "3.2.2"
94
+ version = "3.2.3"
95
95
  dependencies = [
96
96
  "eltdx-protocol",
97
97
  "eltdx-runtime",
@@ -101,7 +101,7 @@ dependencies = [
101
101
 
102
102
  [[package]]
103
103
  name = "eltdx-runtime"
104
- version = "3.2.2"
104
+ version = "3.2.3"
105
105
  dependencies = [
106
106
  "bytes",
107
107
  "eltdx-protocol",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/eltdx-protocol", "crates/eltdx-runtime", "crates/eltdx-python"]
4
4
 
5
5
  [workspace.package]
6
- version = "3.2.2"
6
+ version = "3.2.3"
7
7
  edition = "2021"
8
8
  rust-version = "1.89"
9
9
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eltdx
3
- Version: 3.2.2
3
+ Version: 3.2.3
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -104,12 +104,13 @@ eltdx 默认按“想拿什么数据”组织入口。普通调用优先使用
104
104
  | 五档实时刷新 | 为代码列表建立或刷新实时五档 | [`client.quotes.get_depth()`](docs/methods/7709-增量刷新推送队列.md) | `7709 原生协议` |
105
105
  | push 队列 | 读取未匹配的实时更新帧 | [`client.quotes.poll_push()`](docs/methods/7709-增量刷新推送队列.md) | `7709 原生协议` |
106
106
  | K 线与复权 | 分钟/日/周/月/季/年 K 线、自动分页、前/后/定点复权 | [`client.bars.get()`](docs/methods/7709-K线周期线.md) | `7709 原生协议` |
107
+ | 退市 K 线 | 退市股票日线、不复权、批量查询、自动分页 | [`client.delisted_bars.get()`](docs/methods/7709-退市K线日线接口.md) | `0x052B 原生协议` |
107
108
  | 当日分时 | 当日每分钟价格、成交量和均价 | [`client.minutes.today()`](docs/methods/7709-当日分时.md) | `7709 原生协议` |
108
109
  | 当日成交明细 | 自动分页合并的当日完整成交记录 | [`client.trades.all_today()`](docs/methods/7709-当日成交明细.md) | `7709 原生协议` |
109
110
  | 集合竞价 | 竞价过程、09:25 撮合、前收盘参考价、开盘价/量/额/涨幅 | [`client.helpers.auction_data()`](docs/helpers/竞价数据.md) | `7709` + `Helpers 封装` |
110
111
  | 股本变迁 | 除权除息、股本变化、增发和回购记录 | [`client.corporate.capital_changes()`](docs/methods/7709-股本变迁GBBQ.md) | `7709 原生协议` |
111
112
  | 财务基础 | 流通/总股本、EPS、资产、负债、收入和利润 | [`client.corporate.finance_batch()`](docs/methods/7709-财务基础信息.md) | `7709 原生协议` |
112
- | 本地复权系数 | 为已有本地不复权 K 线提供前/后复权所需系数 | [`client.corporate.adjustment_factors()`](docs/methods/7709-本地复权系数.md) | `7709 本地计算` |
113
+ | 本地复权系数 | 基于权息记录为已有不复权 K 线提供本地计算和审计系数 | [`client.corporate.adjustment_factors()`](docs/methods/7709-本地复权系数.md) | `0x000f 本地计算` |
113
114
  | 特殊品种限制 | 特殊品种涨跌停限制表 | [`client.limits.special()`](docs/methods/7709-特殊品种涨跌停限制.md) | `7709 原生协议` |
114
115
  | F10 公司概况 | 发行上市信息、上市日期、发行价、募资额和承销商 | [`client.f10.company_profile()`](docs/methods/F10-公司概况.md) | `7615 原生 Entry` |
115
116
  | 个股概念 | 某只股票所属的热点题材和入选原因 | [`client.helpers.stock_topics()`](docs/helpers/个股概念板块.md) | `7615` + `Helpers 封装` |
@@ -231,12 +232,13 @@ print(f10.company_profile("000034").rows[0])
231
232
  | 心跳 | `client.session.heartbeat()` | [`0x0004`](docs/COMMANDS_7709.md#cmd-0x0004) | 返回服务端心跳响应;长连接默认后台 30 秒保活,也可手动调用 | [文档](docs/methods/7709-心跳.md) |
232
233
  | 市场代码数量 | `client.codes.count(market)` / `client.codes.a_share_count(market)` | [`0x044e`](docs/COMMANDS_7709.md#cmd-0x044e) / [`0x044d`](docs/COMMANDS_7709.md#cmd-0x044d) | 分别返回整个市场代码表条数或仅 A 股数量;前者不限证券品种 | [文档](docs/methods/7709-代码数量.md) |
233
234
  | 代码表 | `client.codes.all(market, ...)` / `client.codes.all_a_shares()` / `client.codes.list(market, ...)` | [`0x044d`](docs/COMMANDS_7709.md#cmd-0x044d) | 推荐自动翻页取全量;也可直接取 A 股、ETF、指数,或手动控制单页 | [文档](docs/methods/7709-代码表.md) |
234
- | 批量行情快照 | `client.quotes.get_snapshots()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) | 原生一次性基础快照,返回现价、成交量额和已确认的一档盘口 | [文档](docs/methods/7709-批量快照.md) |
235
- | 完整行情 / 五档盘口 | `client.helpers.full_quotes()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) + [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 普通用户推荐入口,自动组合基础快照与实时五档 | [文档](docs/helpers/完整行情.md) |
235
+ | 批量行情快照 | `client.quotes.get_snapshots()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) | 返回现价、成交量额和一档盘口(买一、卖一) | [文档](docs/methods/7709-批量快照.md) |
236
+ | 完整行情 / 五档盘口 | `client.helpers.full_quotes()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) + [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 查询完整当前行情,自动组合基础快照与实时五档 | [文档](docs/helpers/完整行情.md) |
236
237
  | 原生批量行情 | `client.quotes.legacy()` | [`0x053e`](docs/COMMANDS_7709.md#cmd-0x053e) | 原生旧版完整快照,保留五档盘口和协议状态原始字段 | [文档](docs/methods/7709-旧版批量行情.md) |
237
238
  | 五档刷新 / 推送队列 | `client.quotes.get_depth()` / `client.quotes.refresh()` / `client.quotes.poll_push()` | [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 原生五档快捷入口、游标刷新与推送队列;面向高级实时更新场景 | [文档](docs/methods/7709-增量刷新推送队列.md) |
238
239
  | 分类行情 | `client.quotes.list_by_category()` | [`0x054b`](docs/COMMANDS_7709.md#cmd-0x054b) | 按市场或板块分页返回行情列表;可按涨幅、价格、成交额等服务端排序 | [文档](docs/methods/7709-分类行情.md) |
239
240
  | K 线 / 周期线 | `client.bars.get(code_or_codes, ..., all_pages=False)` | [`0x052d`](docs/COMMANDS_7709.md#cmd-0x052d) | 单页或自动分页返回 K 线;支持单只或多只证券并发查询,以及分钟、日、周、月、季、年线和服务端复权参数 | [文档](docs/methods/7709-K线周期线.md) |
241
+ | 退市 K 线 | `client.delisted_bars.get(code, ..., all_pages=False, batch_size=None)` | [`0x052b`](docs/COMMANDS_7709.md#cmd-0x052b) | 退市股票的不复权日线,支持单只或批量查询、自动分页 | [文档](docs/methods/7709-退市K线日线接口.md) |
240
242
  | 当日分时 | `client.minutes.today()` | [`0x0537`](docs/COMMANDS_7709.md#cmd-0x0537) | 返回主站当前保存的每分钟价格、成交量、均价等分时序列 | [文档](docs/methods/7709-当日分时.md) |
241
243
  | 指定日期历史分时 | `client.minutes.history()` | [`0x0fb4`](docs/COMMANDS_7709.md#cmd-0x0fb4) | 按日期返回某天的分时价格和分钟成交量,适合补单日历史分时 | [文档](docs/methods/7709-指定日期历史分时.md) |
242
244
  | 近期历史分时 | `client.minutes.recent()` | [`0x0feb`](docs/COMMANDS_7709.md#cmd-0x0feb) | 返回服务端近期窗口内的历史分时;适合查较近交易日的分钟走势 | [文档](docs/methods/7709-近期历史分时.md) |
@@ -268,6 +270,7 @@ client.bars.get("sz000001", period="week", count=100)
268
270
  client.bars.get("sz000001", period="year", count=20)
269
271
  client.bars.get("sz000001", period="1m", count=240)
270
272
  client.bars.get("sz000001", period="day", adjust="qfq", count=200)
273
+ client.bars.get("sz000001", period="day", adjust="hfq", count=200)
271
274
  client.bars.get("sz000001", period="day", adjust="fixed_qfq", anchor_date="2024-06-03")
272
275
  client.bars.get("sz000001", period="day", all_pages=True, page_size=800)
273
276
  ```
@@ -283,6 +286,10 @@ client.bars.get("sz000001", period="day", all_pages=True, page_size=800)
283
286
  | `adjust` | `fixed_qfq` / `fixed_hfq` | 定点前复权 / 定点后复权,需要配合 `anchor_date` |
284
287
  | `anchor_date` | `YYYY-MM-DD`、`YYYYMMDD`、`date` | 定点复权基准日期,仅定点复权时需要 |
285
288
 
289
+ 直接查询前复权和后复权 K 线,使用 `client.bars.get(..., adjust="qfq" / "hfq")`。已有不复权 K 线、需要本地计算或审计时,使用 `client.corporate.adjustment_factors()`;本地计算与服务端复权价格可能存在差异。
290
+
291
+ 将本地系数应用到一段完整不复权 K 线时,必须把第一根 K 线日期传给 `start_date`,并建议把最后一根 K 线日期传给 `anchor_date`。`start_date=None` 会使用全部有日期的权息事件,可能累计早于服务端第一根可用 K 线的记录,直接用于后复权会产生错误基准。即使日期范围正确,本地 `0x000f` 计算与服务端 `0x052d` 的累计精度和舍入顺序仍可能带来约 `0.01~0.02` 元差异;需要服务端口径时请直接使用 `bars.get(adjust=...)`。
292
+
286
293
  ## F10 资料接口
287
294
 
288
295
  | 功能 | 调用方法 | 底层 Entry | 返回内容 / 用途 | 文档 |
@@ -460,7 +467,7 @@ python scripts/smoke/export_auction_925_daily.py --code sz000001 --start 2026-04
460
467
  | 底层协议和 F10 Entry | [7709 命令](docs/COMMANDS_7709.md) · [7615 F10](docs/F10_7615.md) |
461
468
  | 连接、测速、并发和故障排查 | [调试指南](docs/DEBUG_GUIDE.md) · [架构](docs/ARCHITECTURE.md) |
462
469
  | MCP 安装、工具和资源 | [MCP 文档](docs/MCP.md) |
463
- | 当前版本、变更和旧 API 迁移 | [v3.2.2](docs/releases/v3.2.2.md) · [变更记录](docs/CHANGELOG.md) · [迁移说明](docs/MIGRATION_FROM_OLD.md) |
470
+ | 当前版本、变更和旧 API 迁移 | [v3.2.3](docs/releases/v3.2.3.md) · [变更记录](docs/CHANGELOG.md) · [迁移说明](docs/MIGRATION_FROM_OLD.md) |
464
471
 
465
472
  ## 常用问题
466
473
 
@@ -494,9 +501,7 @@ print(auction.open_price, auction.open_change_pct, auction.open_amount)
494
501
 
495
502
  ## 联系
496
503
 
497
- - QQ 群:[点击链接加入群聊](https://qm.qq.com/q/zAjpZsvfzy)
498
-
499
- - 邮箱:[dapaoxixixi@163.com](mailto:dapaoxixixi@163.com)
504
+ - 交流群:[点击链接加入群聊](https://qm.qq.com/q/zAjpZsvfzy)
500
505
 
501
506
  ## 许可证
502
507
 
@@ -65,12 +65,13 @@ eltdx 默认按“想拿什么数据”组织入口。普通调用优先使用
65
65
  | 五档实时刷新 | 为代码列表建立或刷新实时五档 | [`client.quotes.get_depth()`](docs/methods/7709-增量刷新推送队列.md) | `7709 原生协议` |
66
66
  | push 队列 | 读取未匹配的实时更新帧 | [`client.quotes.poll_push()`](docs/methods/7709-增量刷新推送队列.md) | `7709 原生协议` |
67
67
  | K 线与复权 | 分钟/日/周/月/季/年 K 线、自动分页、前/后/定点复权 | [`client.bars.get()`](docs/methods/7709-K线周期线.md) | `7709 原生协议` |
68
+ | 退市 K 线 | 退市股票日线、不复权、批量查询、自动分页 | [`client.delisted_bars.get()`](docs/methods/7709-退市K线日线接口.md) | `0x052B 原生协议` |
68
69
  | 当日分时 | 当日每分钟价格、成交量和均价 | [`client.minutes.today()`](docs/methods/7709-当日分时.md) | `7709 原生协议` |
69
70
  | 当日成交明细 | 自动分页合并的当日完整成交记录 | [`client.trades.all_today()`](docs/methods/7709-当日成交明细.md) | `7709 原生协议` |
70
71
  | 集合竞价 | 竞价过程、09:25 撮合、前收盘参考价、开盘价/量/额/涨幅 | [`client.helpers.auction_data()`](docs/helpers/竞价数据.md) | `7709` + `Helpers 封装` |
71
72
  | 股本变迁 | 除权除息、股本变化、增发和回购记录 | [`client.corporate.capital_changes()`](docs/methods/7709-股本变迁GBBQ.md) | `7709 原生协议` |
72
73
  | 财务基础 | 流通/总股本、EPS、资产、负债、收入和利润 | [`client.corporate.finance_batch()`](docs/methods/7709-财务基础信息.md) | `7709 原生协议` |
73
- | 本地复权系数 | 为已有本地不复权 K 线提供前/后复权所需系数 | [`client.corporate.adjustment_factors()`](docs/methods/7709-本地复权系数.md) | `7709 本地计算` |
74
+ | 本地复权系数 | 基于权息记录为已有不复权 K 线提供本地计算和审计系数 | [`client.corporate.adjustment_factors()`](docs/methods/7709-本地复权系数.md) | `0x000f 本地计算` |
74
75
  | 特殊品种限制 | 特殊品种涨跌停限制表 | [`client.limits.special()`](docs/methods/7709-特殊品种涨跌停限制.md) | `7709 原生协议` |
75
76
  | F10 公司概况 | 发行上市信息、上市日期、发行价、募资额和承销商 | [`client.f10.company_profile()`](docs/methods/F10-公司概况.md) | `7615 原生 Entry` |
76
77
  | 个股概念 | 某只股票所属的热点题材和入选原因 | [`client.helpers.stock_topics()`](docs/helpers/个股概念板块.md) | `7615` + `Helpers 封装` |
@@ -192,12 +193,13 @@ print(f10.company_profile("000034").rows[0])
192
193
  | 心跳 | `client.session.heartbeat()` | [`0x0004`](docs/COMMANDS_7709.md#cmd-0x0004) | 返回服务端心跳响应;长连接默认后台 30 秒保活,也可手动调用 | [文档](docs/methods/7709-心跳.md) |
193
194
  | 市场代码数量 | `client.codes.count(market)` / `client.codes.a_share_count(market)` | [`0x044e`](docs/COMMANDS_7709.md#cmd-0x044e) / [`0x044d`](docs/COMMANDS_7709.md#cmd-0x044d) | 分别返回整个市场代码表条数或仅 A 股数量;前者不限证券品种 | [文档](docs/methods/7709-代码数量.md) |
194
195
  | 代码表 | `client.codes.all(market, ...)` / `client.codes.all_a_shares()` / `client.codes.list(market, ...)` | [`0x044d`](docs/COMMANDS_7709.md#cmd-0x044d) | 推荐自动翻页取全量;也可直接取 A 股、ETF、指数,或手动控制单页 | [文档](docs/methods/7709-代码表.md) |
195
- | 批量行情快照 | `client.quotes.get_snapshots()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) | 原生一次性基础快照,返回现价、成交量额和已确认的一档盘口 | [文档](docs/methods/7709-批量快照.md) |
196
- | 完整行情 / 五档盘口 | `client.helpers.full_quotes()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) + [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 普通用户推荐入口,自动组合基础快照与实时五档 | [文档](docs/helpers/完整行情.md) |
196
+ | 批量行情快照 | `client.quotes.get_snapshots()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) | 返回现价、成交量额和一档盘口(买一、卖一) | [文档](docs/methods/7709-批量快照.md) |
197
+ | 完整行情 / 五档盘口 | `client.helpers.full_quotes()` | [`0x054c`](docs/COMMANDS_7709.md#cmd-0x054c) + [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 查询完整当前行情,自动组合基础快照与实时五档 | [文档](docs/helpers/完整行情.md) |
197
198
  | 原生批量行情 | `client.quotes.legacy()` | [`0x053e`](docs/COMMANDS_7709.md#cmd-0x053e) | 原生旧版完整快照,保留五档盘口和协议状态原始字段 | [文档](docs/methods/7709-旧版批量行情.md) |
198
199
  | 五档刷新 / 推送队列 | `client.quotes.get_depth()` / `client.quotes.refresh()` / `client.quotes.poll_push()` | [`0x0547`](docs/COMMANDS_7709.md#cmd-0x0547) | 原生五档快捷入口、游标刷新与推送队列;面向高级实时更新场景 | [文档](docs/methods/7709-增量刷新推送队列.md) |
199
200
  | 分类行情 | `client.quotes.list_by_category()` | [`0x054b`](docs/COMMANDS_7709.md#cmd-0x054b) | 按市场或板块分页返回行情列表;可按涨幅、价格、成交额等服务端排序 | [文档](docs/methods/7709-分类行情.md) |
200
201
  | K 线 / 周期线 | `client.bars.get(code_or_codes, ..., all_pages=False)` | [`0x052d`](docs/COMMANDS_7709.md#cmd-0x052d) | 单页或自动分页返回 K 线;支持单只或多只证券并发查询,以及分钟、日、周、月、季、年线和服务端复权参数 | [文档](docs/methods/7709-K线周期线.md) |
202
+ | 退市 K 线 | `client.delisted_bars.get(code, ..., all_pages=False, batch_size=None)` | [`0x052b`](docs/COMMANDS_7709.md#cmd-0x052b) | 退市股票的不复权日线,支持单只或批量查询、自动分页 | [文档](docs/methods/7709-退市K线日线接口.md) |
201
203
  | 当日分时 | `client.minutes.today()` | [`0x0537`](docs/COMMANDS_7709.md#cmd-0x0537) | 返回主站当前保存的每分钟价格、成交量、均价等分时序列 | [文档](docs/methods/7709-当日分时.md) |
202
204
  | 指定日期历史分时 | `client.minutes.history()` | [`0x0fb4`](docs/COMMANDS_7709.md#cmd-0x0fb4) | 按日期返回某天的分时价格和分钟成交量,适合补单日历史分时 | [文档](docs/methods/7709-指定日期历史分时.md) |
203
205
  | 近期历史分时 | `client.minutes.recent()` | [`0x0feb`](docs/COMMANDS_7709.md#cmd-0x0feb) | 返回服务端近期窗口内的历史分时;适合查较近交易日的分钟走势 | [文档](docs/methods/7709-近期历史分时.md) |
@@ -229,6 +231,7 @@ client.bars.get("sz000001", period="week", count=100)
229
231
  client.bars.get("sz000001", period="year", count=20)
230
232
  client.bars.get("sz000001", period="1m", count=240)
231
233
  client.bars.get("sz000001", period="day", adjust="qfq", count=200)
234
+ client.bars.get("sz000001", period="day", adjust="hfq", count=200)
232
235
  client.bars.get("sz000001", period="day", adjust="fixed_qfq", anchor_date="2024-06-03")
233
236
  client.bars.get("sz000001", period="day", all_pages=True, page_size=800)
234
237
  ```
@@ -244,6 +247,10 @@ client.bars.get("sz000001", period="day", all_pages=True, page_size=800)
244
247
  | `adjust` | `fixed_qfq` / `fixed_hfq` | 定点前复权 / 定点后复权,需要配合 `anchor_date` |
245
248
  | `anchor_date` | `YYYY-MM-DD`、`YYYYMMDD`、`date` | 定点复权基准日期,仅定点复权时需要 |
246
249
 
250
+ 直接查询前复权和后复权 K 线,使用 `client.bars.get(..., adjust="qfq" / "hfq")`。已有不复权 K 线、需要本地计算或审计时,使用 `client.corporate.adjustment_factors()`;本地计算与服务端复权价格可能存在差异。
251
+
252
+ 将本地系数应用到一段完整不复权 K 线时,必须把第一根 K 线日期传给 `start_date`,并建议把最后一根 K 线日期传给 `anchor_date`。`start_date=None` 会使用全部有日期的权息事件,可能累计早于服务端第一根可用 K 线的记录,直接用于后复权会产生错误基准。即使日期范围正确,本地 `0x000f` 计算与服务端 `0x052d` 的累计精度和舍入顺序仍可能带来约 `0.01~0.02` 元差异;需要服务端口径时请直接使用 `bars.get(adjust=...)`。
253
+
247
254
  ## F10 资料接口
248
255
 
249
256
  | 功能 | 调用方法 | 底层 Entry | 返回内容 / 用途 | 文档 |
@@ -421,7 +428,7 @@ python scripts/smoke/export_auction_925_daily.py --code sz000001 --start 2026-04
421
428
  | 底层协议和 F10 Entry | [7709 命令](docs/COMMANDS_7709.md) · [7615 F10](docs/F10_7615.md) |
422
429
  | 连接、测速、并发和故障排查 | [调试指南](docs/DEBUG_GUIDE.md) · [架构](docs/ARCHITECTURE.md) |
423
430
  | MCP 安装、工具和资源 | [MCP 文档](docs/MCP.md) |
424
- | 当前版本、变更和旧 API 迁移 | [v3.2.2](docs/releases/v3.2.2.md) · [变更记录](docs/CHANGELOG.md) · [迁移说明](docs/MIGRATION_FROM_OLD.md) |
431
+ | 当前版本、变更和旧 API 迁移 | [v3.2.3](docs/releases/v3.2.3.md) · [变更记录](docs/CHANGELOG.md) · [迁移说明](docs/MIGRATION_FROM_OLD.md) |
425
432
 
426
433
  ## 常用问题
427
434
 
@@ -455,9 +462,7 @@ print(auction.open_price, auction.open_change_pct, auction.open_amount)
455
462
 
456
463
  ## 联系
457
464
 
458
- - QQ 群:[点击链接加入群聊](https://qm.qq.com/q/zAjpZsvfzy)
459
-
460
- - 邮箱:[dapaoxixixi@163.com](mailto:dapaoxixixi@163.com)
465
+ - 交流群:[点击链接加入群聊](https://qm.qq.com/q/zAjpZsvfzy)
461
466
 
462
467
  ## 许可证
463
468
 
@@ -0,0 +1,230 @@
1
+ use bytes::Bytes;
2
+
3
+ use crate::commands::klines::KlineBar;
4
+ use crate::error::ProtocolError;
5
+ use crate::frame::RequestFrame;
6
+ use crate::limits::{MAX_KLINE_PAGE_SIZE, MAX_RESPONSE_PAYLOAD_SIZE};
7
+ use crate::unit::{
8
+ consume_price, get_volume, little_u16, little_u32, milli_to_float, DateTimeParts,
9
+ NormalizedCode,
10
+ };
11
+
12
+ pub const TYPE_DELISTED_KLINES: u16 = 0x052b;
13
+
14
+ #[derive(Clone, Debug, Eq, PartialEq)]
15
+ pub struct DelistedKlinesRequest {
16
+ pub code: NormalizedCode,
17
+ pub start: u16,
18
+ pub count: u16,
19
+ pub include_raw: bool,
20
+ }
21
+
22
+ impl DelistedKlinesRequest {
23
+ pub fn new(
24
+ code: NormalizedCode,
25
+ start: u16,
26
+ count: u16,
27
+ include_raw: bool,
28
+ ) -> Result<Self, ProtocolError> {
29
+ if count == 0 || count > MAX_KLINE_PAGE_SIZE {
30
+ return Err(ProtocolError::invalid_argument(
31
+ "count",
32
+ format!("count must be between 1 and {MAX_KLINE_PAGE_SIZE}"),
33
+ ));
34
+ }
35
+ Ok(Self {
36
+ code,
37
+ start,
38
+ count,
39
+ include_raw,
40
+ })
41
+ }
42
+
43
+ pub fn frame(&self, msg_id: u32) -> RequestFrame {
44
+ let mut data = Vec::with_capacity(12);
45
+ data.extend_from_slice(&u16::from(self.code.market().id()).to_le_bytes());
46
+ data.extend_from_slice(self.code.number().as_bytes());
47
+ data.extend_from_slice(&self.start.to_le_bytes());
48
+ data.extend_from_slice(&self.count.to_le_bytes());
49
+ RequestFrame::new(msg_id, TYPE_DELISTED_KLINES, data)
50
+ }
51
+ }
52
+
53
+ #[derive(Clone, Debug, PartialEq)]
54
+ pub struct DelistedKlineSeries {
55
+ pub request: DelistedKlinesRequest,
56
+ pub bars: Vec<KlineBar>,
57
+ pub raw_payload: Bytes,
58
+ }
59
+
60
+ pub fn parse_delisted_klines_payload(
61
+ payload: &[u8],
62
+ request: DelistedKlinesRequest,
63
+ ) -> Result<DelistedKlineSeries, ProtocolError> {
64
+ if payload.len() > MAX_RESPONSE_PAYLOAD_SIZE {
65
+ return Err(ProtocolError::LimitExceeded {
66
+ resource: "delisted klines",
67
+ actual: payload.len(),
68
+ limit: MAX_RESPONSE_PAYLOAD_SIZE,
69
+ });
70
+ }
71
+ if payload.len() < 2 {
72
+ return Err(ProtocolError::invalid_data(
73
+ "delisted klines",
74
+ "invalid payload",
75
+ ));
76
+ }
77
+ let count = usize::from(little_u16(&payload[..2])?);
78
+ if count > request.count.into() || count > payload.len().saturating_sub(2) / 17 {
79
+ return Err(ProtocolError::invalid_data(
80
+ "delisted klines",
81
+ "truncated kline record",
82
+ ));
83
+ }
84
+
85
+ let mut offset = 2_usize;
86
+ let mut last_close_milli = 0_i64;
87
+ let mut bars = Vec::with_capacity(count);
88
+ for _ in 0..count {
89
+ let record_start = offset;
90
+ let date_raw = read_u32(payload, offset, "truncated date")?;
91
+ offset += 4;
92
+ let date = crate::unit::DateParts::from_yyyymmdd(date_raw)
93
+ .ok_or_else(|| ProtocolError::invalid_data("delisted klines", "invalid date"))?;
94
+ let time = DateTimeParts::shanghai(date, 0, 0, 0)?;
95
+ let (open_delta_raw, next) = consume_price(payload, offset)?;
96
+ offset = next;
97
+ let (close_delta_raw, next) = consume_price(payload, offset)?;
98
+ offset = next;
99
+ let (high_delta_raw, next) = consume_price(payload, offset)?;
100
+ offset = next;
101
+ let (low_delta_raw, next) = consume_price(payload, offset)?;
102
+ offset = next;
103
+ let previous_close = if bars.is_empty() {
104
+ None
105
+ } else {
106
+ Some(last_close_milli)
107
+ };
108
+ let open_price_milli = checked_add(last_close_milli, open_delta_raw)?;
109
+ let close_price_milli = checked_add(open_price_milli, close_delta_raw)?;
110
+ let high_price_milli = checked_add(open_price_milli, high_delta_raw)?;
111
+ let low_price_milli = checked_add(open_price_milli, low_delta_raw)?;
112
+ if low_price_milli > open_price_milli.min(close_price_milli)
113
+ || high_price_milli < open_price_milli.max(close_price_milli)
114
+ || low_price_milli > high_price_milli
115
+ {
116
+ return Err(ProtocolError::invalid_data(
117
+ "delisted klines",
118
+ "invalid OHLC",
119
+ ));
120
+ }
121
+ let (volume_shares, next) = consume_price(payload, offset)?;
122
+ offset = next;
123
+ if volume_shares < 0 || volume_shares > i64::from(u32::MAX) {
124
+ return Err(ProtocolError::invalid_data(
125
+ "delisted klines",
126
+ "invalid volume",
127
+ ));
128
+ }
129
+ let volume_raw = volume_shares as u32;
130
+ let amount_raw = read_u32(payload, offset, "truncated amount")?;
131
+ offset += 4;
132
+ let _unknown_suffix = payload
133
+ .get(offset..offset.saturating_add(4))
134
+ .ok_or_else(|| ProtocolError::invalid_data("delisted klines", "truncated suffix"))?;
135
+ offset += 4;
136
+ last_close_milli = close_price_milli;
137
+ bars.push(KlineBar {
138
+ time,
139
+ open: milli_to_float(open_price_milli),
140
+ close: milli_to_float(close_price_milli),
141
+ high: milli_to_float(high_price_milli),
142
+ low: milli_to_float(low_price_milli),
143
+ open_price_milli,
144
+ close_price_milli,
145
+ high_price_milli,
146
+ low_price_milli,
147
+ last_close_price_milli: previous_close,
148
+ volume_raw,
149
+ amount_raw,
150
+ volume_wire_value: f64::from(volume_raw),
151
+ volume_lots: f64::from(volume_raw) / 100.0,
152
+ amount: get_volume(amount_raw),
153
+ open_delta_raw,
154
+ close_delta_raw,
155
+ high_delta_raw,
156
+ low_delta_raw,
157
+ up_count: None,
158
+ down_count: None,
159
+ record_hex: encode_hex(&payload[record_start..offset]),
160
+ });
161
+ }
162
+ if offset != payload.len() {
163
+ return Err(ProtocolError::invalid_data(
164
+ "delisted klines",
165
+ format!(
166
+ "unexpected trailing payload bytes: {}",
167
+ payload.len() - offset
168
+ ),
169
+ ));
170
+ }
171
+ Ok(DelistedKlineSeries {
172
+ request,
173
+ bars,
174
+ raw_payload: Bytes::copy_from_slice(payload),
175
+ })
176
+ }
177
+
178
+ fn read_u32(data: &[u8], offset: usize, message: &'static str) -> Result<u32, ProtocolError> {
179
+ little_u32(
180
+ data.get(offset..offset.saturating_add(4))
181
+ .ok_or_else(|| ProtocolError::invalid_data("delisted klines", message))?,
182
+ )
183
+ }
184
+
185
+ fn checked_add(left: i64, right: i64) -> Result<i64, ProtocolError> {
186
+ left.checked_add(right)
187
+ .ok_or_else(|| ProtocolError::invalid_data("delisted klines", "price overflow"))
188
+ }
189
+
190
+ fn encode_hex(data: &[u8]) -> String {
191
+ const DIGITS: &[u8; 16] = b"0123456789abcdef";
192
+ let mut output = String::with_capacity(data.len() * 2);
193
+ for byte in data {
194
+ output.push(char::from(DIGITS[usize::from(*byte >> 4)]));
195
+ output.push(char::from(DIGITS[usize::from(*byte & 0x0f)]));
196
+ }
197
+ output
198
+ }
199
+
200
+ #[cfg(test)]
201
+ mod tests {
202
+ use super::{parse_delisted_klines_payload, DelistedKlinesRequest};
203
+ use crate::unit::NormalizedCode;
204
+
205
+ #[test]
206
+ fn request_matches_verified_052b_body() -> Result<(), crate::ProtocolError> {
207
+ let request =
208
+ DelistedKlinesRequest::new(NormalizedCode::parse("sz000038")?, 800, 20, false)?;
209
+ let frame = request.frame(7);
210
+ assert_eq!(
211
+ frame.data.as_ref(),
212
+ &[0, 0, b'0', b'0', b'0', b'0', b'3', b'8', 0x20, 0x03, 0x14, 0]
213
+ );
214
+ Ok(())
215
+ }
216
+
217
+ #[test]
218
+ fn parses_one_verified_daily_record() -> Result<(), crate::ProtocolError> {
219
+ let request = DelistedKlinesRequest::new(NormalizedCode::parse("sz000038")?, 0, 1, false)?;
220
+ let payload = bytes::Bytes::from_static(&[
221
+ 1, 0, 0x18, 0xb1, 0x34, 0x01, 0xb8, 0x33, 0xb4, 0x02, 0x88, 0x03, 0x00, 0x84, 0xe4,
222
+ 0x9a, 0x04, 0xdb, 0xb8, 0x67, 0x4b, 0, 0, 1, 0,
223
+ ]);
224
+ let parsed = parse_delisted_klines_payload(&payload, request)?;
225
+ assert_eq!(parsed.bars.len(), 1);
226
+ assert_eq!(parsed.bars[0].close_price_milli, 3500);
227
+ assert_eq!(parsed.bars[0].volume_raw, 4_413_700);
228
+ Ok(())
229
+ }
230
+ }
@@ -1,5 +1,6 @@
1
1
  pub mod auctions;
2
2
  pub mod corporate;
3
+ pub mod delisted_bars;
3
4
  pub mod klines;
4
5
  pub mod limits;
5
6
  pub mod minutes;
@@ -3,6 +3,7 @@ use crate::commands::{
3
3
  corporate::{
4
4
  CapitalChangesRequest, FinanceBatchRequest, TYPE_CAPITAL_CHANGES, TYPE_FINANCE_BATCH,
5
5
  },
6
+ delisted_bars::{DelistedKlinesRequest, TYPE_DELISTED_KLINES},
6
7
  klines::{KlinesRequest, TYPE_KLINES},
7
8
  limits::{SpecialLimitsRequest, TYPE_SPECIAL_LIMITS},
8
9
  minutes::{
@@ -25,7 +26,7 @@ use crate::commands::{
25
26
  use crate::error::ProtocolError;
26
27
  use crate::frame::RequestFrame;
27
28
 
28
- pub const SUPPORTED_COMMAND_CODES: [u16; 22] = [
29
+ pub const SUPPORTED_COMMAND_CODES: [u16; 23] = [
29
30
  TYPE_HEARTBEAT,
30
31
  TYPE_HANDSHAKE,
31
32
  TYPE_CAPITAL_CHANGES,
@@ -34,6 +35,7 @@ pub const SUPPORTED_COMMAND_CODES: [u16; 22] = [
34
35
  TYPE_SECURITY_COUNT,
35
36
  TYPE_SPECIAL_LIMITS,
36
37
  TYPE_INTRADAY_AUX,
38
+ TYPE_DELISTED_KLINES,
37
39
  TYPE_KLINES,
38
40
  TYPE_TODAY_INTRADAY,
39
41
  TYPE_LEGACY_QUOTES,
@@ -60,6 +62,7 @@ pub enum CommandRequest {
60
62
  SecurityCount(SecurityCountRequest),
61
63
  SpecialLimits(SpecialLimitsRequest),
62
64
  IntradayAux(IntradayAuxRequest),
65
+ DelistedKlines(DelistedKlinesRequest),
63
66
  Klines(KlinesRequest),
64
67
  TodayIntraday(TodayIntradayRequest),
65
68
  LegacyQuotes(LegacyQuotesRequest),
@@ -87,6 +90,7 @@ impl CommandRequest {
87
90
  Self::SecurityCount(_) => TYPE_SECURITY_COUNT,
88
91
  Self::SpecialLimits(_) => TYPE_SPECIAL_LIMITS,
89
92
  Self::IntradayAux(_) => TYPE_INTRADAY_AUX,
93
+ Self::DelistedKlines(_) => TYPE_DELISTED_KLINES,
90
94
  Self::Klines(_) => TYPE_KLINES,
91
95
  Self::TodayIntraday(_) => TYPE_TODAY_INTRADAY,
92
96
  Self::LegacyQuotes(_) => TYPE_LEGACY_QUOTES,
@@ -118,6 +122,7 @@ impl CommandRequest {
118
122
  Self::SecurityCount(request) => request.frame(msg_id),
119
123
  Self::SpecialLimits(request) => request.frame(msg_id),
120
124
  Self::IntradayAux(request) => request.frame(msg_id),
125
+ Self::DelistedKlines(request) => request.frame(msg_id),
121
126
  Self::Klines(request) => request.frame(msg_id),
122
127
  Self::TodayIntraday(request) => request.frame(msg_id),
123
128
  Self::LegacyQuotes(request) => return request.frame(msg_id),
@@ -148,6 +153,7 @@ pub const fn is_supported_command(command: u16) -> bool {
148
153
  | TYPE_SECURITY_COUNT
149
154
  | TYPE_SPECIAL_LIMITS
150
155
  | TYPE_INTRADAY_AUX
156
+ | TYPE_DELISTED_KLINES
151
157
  | TYPE_KLINES
152
158
  | TYPE_TODAY_INTRADAY
153
159
  | TYPE_LEGACY_QUOTES
@@ -171,6 +177,7 @@ mod tests {
171
177
  use crate::commands::{
172
178
  auctions::AuctionSeriesRequest,
173
179
  corporate::{CapitalChangesRequest, FinanceBatchRequest},
180
+ delisted_bars::DelistedKlinesRequest,
174
181
  klines::{KlineKind, KlinesRequest},
175
182
  limits::SpecialLimitsRequest,
176
183
  minutes::{
@@ -191,8 +198,8 @@ mod tests {
191
198
  use crate::ProtocolError;
192
199
 
193
200
  #[test]
194
- fn exact_twenty_one_command_codes_are_registered() {
195
- assert_eq!(SUPPORTED_COMMAND_CODES.len(), 22);
201
+ fn exact_twenty_three_command_codes_are_registered() {
202
+ assert_eq!(SUPPORTED_COMMAND_CODES.len(), 23);
196
203
  assert!(SUPPORTED_COMMAND_CODES
197
204
  .windows(2)
198
205
  .all(|pair| pair[0] < pair[1]));
@@ -220,6 +227,7 @@ mod tests {
220
227
  CommandRequest::CapitalChanges(value) => assert!(!value.include_raw),
221
228
  CommandRequest::FinanceBatch(value) => assert!(!value.include_raw()),
222
229
  CommandRequest::IntradayAux(value) => assert!(!value.include_raw),
230
+ CommandRequest::DelistedKlines(value) => assert!(!value.include_raw),
223
231
  CommandRequest::Klines(value) => assert!(!value.include_raw),
224
232
  CommandRequest::TodayIntraday(value) => assert!(!value.include_raw),
225
233
  CommandRequest::AuctionSeries(value) => assert!(!value.include_raw),
@@ -237,6 +245,7 @@ mod tests {
237
245
  CommandRequest::CapitalChanges(value) => value.include_raw,
238
246
  CommandRequest::FinanceBatch(value) => value.include_raw(),
239
247
  CommandRequest::IntradayAux(value) => value.include_raw,
248
+ CommandRequest::DelistedKlines(value) => value.include_raw,
240
249
  CommandRequest::Klines(value) => value.include_raw,
241
250
  CommandRequest::TodayIntraday(value) => value.include_raw,
242
251
  CommandRequest::AuctionSeries(value) => value.include_raw,
@@ -270,6 +279,7 @@ mod tests {
270
279
  code.clone(),
271
280
  IntradayAuxKind::BuySellStrength,
272
281
  )),
282
+ CommandRequest::DelistedKlines(DelistedKlinesRequest::new(code.clone(), 0, 1, false)?),
273
283
  CommandRequest::Klines(KlinesRequest::new(
274
284
  code.clone(),
275
285
  KlinePeriod::normalize("day")?,
@@ -320,6 +330,7 @@ mod tests {
320
330
  IntradayAuxKind::BuySellStrength,
321
331
  true,
322
332
  )),
333
+ CommandRequest::DelistedKlines(DelistedKlinesRequest::new(code.clone(), 0, 1, true)?),
323
334
  CommandRequest::Klines(KlinesRequest::with_include_raw(
324
335
  code.clone(),
325
336
  KlinePeriod::normalize("day")?,
@@ -4,6 +4,7 @@ use crate::commands::{
4
4
  parse_capital_changes_payload, parse_finance_batch_payload, CapitalChangeBatch,
5
5
  FinanceBatch,
6
6
  },
7
+ delisted_bars::{parse_delisted_klines_payload, DelistedKlineSeries},
7
8
  klines::{parse_klines_payload, KlineSeries},
8
9
  limits::{parse_special_limits_payload, SpecialLimitPage},
9
10
  minutes::{
@@ -38,6 +39,7 @@ pub enum CommandResponse {
38
39
  SecurityCount(u16),
39
40
  SpecialLimits(SpecialLimitPage),
40
41
  IntradayAux(MinuteAuxSeries),
42
+ DelistedKlines(DelistedKlineSeries),
41
43
  Klines(KlineSeries),
42
44
  TodayIntraday(MinuteSeries<TodayIntradayRequest>),
43
45
  LegacyQuotes(Vec<LegacyQuote>),
@@ -77,6 +79,9 @@ impl CommandResponse {
77
79
  CommandRequest::IntradayAux(request) => {
78
80
  parse_intraday_aux_payload(payload, request).map(Self::IntradayAux)
79
81
  }
82
+ CommandRequest::DelistedKlines(request) => {
83
+ parse_delisted_klines_payload(payload, request).map(Self::DelistedKlines)
84
+ }
80
85
  CommandRequest::Klines(request) => {
81
86
  parse_klines_payload(payload, request).map(Self::Klines)
82
87
  }
@@ -6,6 +6,7 @@ use eltdx_protocol::commands::{
6
6
  corporate::{
7
7
  CapitalChangesRequest, FinanceBatchRequest, TYPE_CAPITAL_CHANGES, TYPE_FINANCE_BATCH,
8
8
  },
9
+ delisted_bars::{DelistedKlinesRequest, TYPE_DELISTED_KLINES},
9
10
  klines::{KlineKind, KlinesRequest, TYPE_KLINES},
10
11
  limits::{SpecialLimitsRequest, TYPE_SPECIAL_LIMITS},
11
12
  minutes::{
@@ -69,6 +70,7 @@ pub fn from_python(
69
70
  TYPE_SECURITY_COUNT => security_count(py, payload),
70
71
  TYPE_SPECIAL_LIMITS => special_limits(payload),
71
72
  TYPE_INTRADAY_AUX => intraday_aux(payload),
73
+ TYPE_DELISTED_KLINES => delisted_klines(payload),
72
74
  TYPE_KLINES => klines(payload),
73
75
  TYPE_TODAY_INTRADAY => today_intraday(payload),
74
76
  TYPE_LEGACY_QUOTES => legacy_quotes(payload),
@@ -191,6 +193,30 @@ fn klines(payload: Payload<'_, '_>) -> PyResult<CommandRequest> {
191
193
  .map(CommandRequest::Klines)
192
194
  }
193
195
 
196
+ fn delisted_klines(payload: Payload<'_, '_>) -> PyResult<CommandRequest> {
197
+ let value = required(payload, &["code"], "code")?;
198
+ let text = string_value(&value, "code")?;
199
+ let text = text.trim();
200
+ // The terminal's T prefix marks delisting; it is not part of the wire code.
201
+ let number = if text.len() == 7 && (text.starts_with('T') || text.starts_with('t')) {
202
+ &text[1..]
203
+ } else {
204
+ text
205
+ };
206
+ let code = protocol(NormalizedCode::parse(number))?;
207
+ let start = u16_field(payload, &["start"], 0, 0, u16::MAX)?;
208
+ let count = u16_field(
209
+ payload,
210
+ &["count"],
211
+ MAX_KLINE_PAGE_SIZE,
212
+ 1,
213
+ MAX_KLINE_PAGE_SIZE,
214
+ )?;
215
+ let include_raw = bool_field(payload, "include_raw", false)?;
216
+ protocol(DelistedKlinesRequest::new(code, start, count, include_raw))
217
+ .map(CommandRequest::DelistedKlines)
218
+ }
219
+
194
220
  fn today_intraday(payload: Payload<'_, '_>) -> PyResult<CommandRequest> {
195
221
  let code = required_code(payload, "code")?;
196
222
  let reserved_tail_raw = match get(payload, &["reserved_tail_raw"])? {