screamer 2.2.0__tar.gz → 2.3.0__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 (1094) hide show
  1. {screamer-2.2.0 → screamer-2.3.0}/CMakeLists.txt +1 -1
  2. {screamer-2.2.0 → screamer-2.3.0}/PKG-INFO +1 -1
  3. {screamer-2.2.0 → screamer-2.3.0}/js/README.md +24 -1
  4. screamer-2.3.0/js/docs-guide/environments.md +80 -0
  5. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/getting-started.md +4 -0
  6. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/index.md +2 -1
  7. screamer-2.3.0/js/docs-guide/live-demo.md +59 -0
  8. screamer-2.3.0/js/examples/live-trades.html +441 -0
  9. {screamer-2.2.0 → screamer-2.3.0}/js/package-lock.json +1 -0
  10. {screamer-2.2.0 → screamer-2.3.0}/js/package.json +3 -1
  11. {screamer-2.2.0 → screamer-2.3.0}/js/src/codes.ts +3 -1
  12. {screamer-2.2.0 → screamer-2.3.0}/js/typedoc.json +3 -0
  13. {screamer-2.2.0 → screamer-2.3.0}/pyproject.toml +3 -3
  14. {screamer-2.2.0 → screamer-2.3.0}/screamer/__init__.py +1 -1
  15. {screamer-2.2.0 → screamer-2.3.0}/wasm/CMakeLists.txt +1 -1
  16. {screamer-2.2.0 → screamer-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {screamer-2.2.0 → screamer-2.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  18. {screamer-2.2.0 → screamer-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  19. {screamer-2.2.0 → screamer-2.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {screamer-2.2.0 → screamer-2.3.0}/.github/workflows/build-wheels.yml +0 -0
  21. {screamer-2.2.0 → screamer-2.3.0}/.github/workflows/docs.yml +0 -0
  22. {screamer-2.2.0 → screamer-2.3.0}/.github/workflows/js-docs.yml +0 -0
  23. {screamer-2.2.0 → screamer-2.3.0}/.github/workflows/js-publish.yml +0 -0
  24. {screamer-2.2.0 → screamer-2.3.0}/.github/workflows/tests.yml +0 -0
  25. {screamer-2.2.0 → screamer-2.3.0}/.gitignore +0 -0
  26. {screamer-2.2.0 → screamer-2.3.0}/.readthedocs.yaml +0 -0
  27. {screamer-2.2.0 → screamer-2.3.0}/AUTHORS.md +0 -0
  28. {screamer-2.2.0 → screamer-2.3.0}/CHANGELOG.md +0 -0
  29. {screamer-2.2.0 → screamer-2.3.0}/CODE_OF_CONDUCT.md +0 -0
  30. {screamer-2.2.0 → screamer-2.3.0}/CONTRIBUTING.md +0 -0
  31. {screamer-2.2.0 → screamer-2.3.0}/LICENSE +0 -0
  32. {screamer-2.2.0 → screamer-2.3.0}/Makefile +0 -0
  33. {screamer-2.2.0 → screamer-2.3.0}/README.md +0 -0
  34. {screamer-2.2.0 → screamer-2.3.0}/SECURITY.md +0 -0
  35. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/__init__.py +0 -0
  36. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/_compare/COMPARISON.md +0 -0
  37. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/_compare/comparison.png +0 -0
  38. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/build_compiled.py +0 -0
  39. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/make_comparison_tables.py +0 -0
  40. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/make_plots.py +0 -0
  41. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/make_rank_plot.py +0 -0
  42. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/make_speed_chart.py +0 -0
  43. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/reference_impls.py +0 -0
  44. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/run_benchmarks.py +0 -0
  45. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/run_streaming_benchmarks.py +0 -0
  46. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/streaming_compiled.pyx +0 -0
  47. {screamer-2.2.0 → screamer-2.3.0}/benchmarks/streaming_impls.py +0 -0
  48. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings.cpp +0 -0
  49. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_core.cpp +0 -0
  50. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_dag.cpp +0 -0
  51. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_ew.cpp +0 -0
  52. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_expanding.cpp +0 -0
  53. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_fin.cpp +0 -0
  54. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_math.cpp +0 -0
  55. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_micro.cpp +0 -0
  56. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_misc.cpp +0 -0
  57. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_preprocessing.cpp +0 -0
  58. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_rolling.cpp +0 -0
  59. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_signal.cpp +0 -0
  60. {screamer-2.2.0 → screamer-2.3.0}/bindings/bindings_streams.cpp +0 -0
  61. {screamer-2.2.0 → screamer-2.3.0}/devtools/__init__.py +0 -0
  62. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/AD.py +0 -0
  63. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ADOSC.py +0 -0
  64. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ADX.py +0 -0
  65. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ADXR.py +0 -0
  66. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ATR.py +0 -0
  67. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Abs.py +0 -0
  68. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Acos.py +0 -0
  69. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Add.py +0 -0
  70. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/And.py +0 -0
  71. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Asin.py +0 -0
  72. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Atan.py +0 -0
  73. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Atan2.py +0 -0
  74. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/BOP.py +0 -0
  75. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Butter.py +0 -0
  76. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ButterBandpass.py +0 -0
  77. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ButterBandstop.py +0 -0
  78. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ButterHighpass.py +0 -0
  79. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/CCI.py +0 -0
  80. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Cart2Polar.py +0 -0
  81. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Ceil.py +0 -0
  82. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Clip.py +0 -0
  83. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Cos.py +0 -0
  84. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Cube.py +0 -0
  85. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/CumMax.py +0 -0
  86. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/CumMin.py +0 -0
  87. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/CumProd.py +0 -0
  88. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/CumSum.py +0 -0
  89. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/DEMA.py +0 -0
  90. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/DX.py +0 -0
  91. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Decycler.py +0 -0
  92. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Detrend.py +0 -0
  93. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Diff.py +0 -0
  94. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Diff2.py +0 -0
  95. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Div.py +0 -0
  96. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Drawdown.py +0 -0
  97. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Elu.py +0 -0
  98. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Equal.py +0 -0
  99. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Erf.py +0 -0
  100. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Erfc.py +0 -0
  101. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwBeta.py +0 -0
  102. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwCorr.py +0 -0
  103. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwCov.py +0 -0
  104. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwGarmanKlassVar.py +0 -0
  105. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwKurt.py +0 -0
  106. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwMean.py +0 -0
  107. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwParkinsonVar.py +0 -0
  108. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwRms.py +0 -0
  109. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwRogersSatchellVar.py +0 -0
  110. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwSkew.py +0 -0
  111. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwStd.py +0 -0
  112. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwVar.py +0 -0
  113. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/EwZscore.py +0 -0
  114. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Exp.py +0 -0
  115. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingKurt.py +0 -0
  116. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingMax.py +0 -0
  117. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingMean.py +0 -0
  118. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingMin.py +0 -0
  119. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingProd.py +0 -0
  120. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingSkew.py +0 -0
  121. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingSlope.py +0 -0
  122. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingStd.py +0 -0
  123. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingSum.py +0 -0
  124. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ExpandingVar.py +0 -0
  125. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Ffill.py +0 -0
  126. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/FillNa.py +0 -0
  127. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/First.py +0 -0
  128. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Floor.py +0 -0
  129. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/FracDiff.py +0 -0
  130. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/GreaterEqual.py +0 -0
  131. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/GreaterThan.py +0 -0
  132. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/HawkesIntensity.py +0 -0
  133. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Hold.py +0 -0
  134. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/HullMA.py +0 -0
  135. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Hypot.py +0 -0
  136. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Identity.py +0 -0
  137. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/IsFinite.py +0 -0
  138. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/IsNan.py +0 -0
  139. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/KAMA.py +0 -0
  140. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/KalmanFilter.py +0 -0
  141. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Lag.py +0 -0
  142. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Last.py +0 -0
  143. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/LessEqual.py +0 -0
  144. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/LessThan.py +0 -0
  145. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Linear.py +0 -0
  146. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Linear2.py +0 -0
  147. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Log.py +0 -0
  148. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/LogReturn.py +0 -0
  149. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MACD.py +0 -0
  150. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MAMA.py +0 -0
  151. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MFI.py +0 -0
  152. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MaxDrawdown.py +0 -0
  153. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MinusDI.py +0 -0
  154. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MinusDM.py +0 -0
  155. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Momentum.py +0 -0
  156. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/MovingAverage.py +0 -0
  157. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Mul.py +0 -0
  158. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/NATR.py +0 -0
  159. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/NegPart.py +0 -0
  160. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Not.py +0 -0
  161. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/NotEqual.py +0 -0
  162. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/OBV.py +0 -0
  163. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Or.py +0 -0
  164. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/PlusDI.py +0 -0
  165. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/PlusDM.py +0 -0
  166. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Polar2Cart.py +0 -0
  167. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/PosPart.py +0 -0
  168. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Power.py +0 -0
  169. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ROC.py +0 -0
  170. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ROCP.py +0 -0
  171. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/ROCR.py +0 -0
  172. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Relu.py +0 -0
  173. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Return.py +0 -0
  174. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingArgmax.py +0 -0
  175. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingArgmin.py +0 -0
  176. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingBeta.py +0 -0
  177. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingCorr.py +0 -0
  178. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingCov.py +0 -0
  179. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingGarmanKlassVar.py +0 -0
  180. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingHitRate.py +0 -0
  181. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingIqr.py +0 -0
  182. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingKurt.py +0 -0
  183. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMad.py +0 -0
  184. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMax.py +0 -0
  185. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMean.py +0 -0
  186. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMedian.py +0 -0
  187. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMedianAD.py +0 -0
  188. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingMin.py +0 -0
  189. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingOU.py +0 -0
  190. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingParkinsonVar.py +0 -0
  191. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingPoly1.py +0 -0
  192. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingPoly2.py +0 -0
  193. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingQuantile.py +0 -0
  194. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingRSI.py +0 -0
  195. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingRange.py +0 -0
  196. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingRms.py +0 -0
  197. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingRogersSatchellVar.py +0 -0
  198. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingSigmaClip.py +0 -0
  199. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingSkew.py +0 -0
  200. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingStd.py +0 -0
  201. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingSum.py +0 -0
  202. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingVWAP.py +0 -0
  203. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingVar.py +0 -0
  204. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingYangZhangVar.py +0 -0
  205. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RollingZscore.py +0 -0
  206. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/RoofingFilter.py +0 -0
  207. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Round.py +0 -0
  208. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/SchmittTrigger.py +0 -0
  209. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Selu.py +0 -0
  210. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Sigmoid.py +0 -0
  211. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Sign.py +0 -0
  212. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Sin.py +0 -0
  213. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Softsign.py +0 -0
  214. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Sqrt.py +0 -0
  215. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Square.py +0 -0
  216. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Stoch.py +0 -0
  217. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/StochRSI.py +0 -0
  218. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Sub.py +0 -0
  219. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/SuperSmoother.py +0 -0
  220. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/TEMA.py +0 -0
  221. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/TRIMA.py +0 -0
  222. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/TRIX.py +0 -0
  223. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Tanh.py +0 -0
  224. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/TrueRange.py +0 -0
  225. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/UltimateOscillator.py +0 -0
  226. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/WMA.py +0 -0
  227. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/Where.py +0 -0
  228. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/WilliamsR.py +0 -0
  229. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/__init__.py +0 -0
  230. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/_ohlc_vol.py +0 -0
  231. {screamer-2.2.0 → screamer-2.3.0}/devtools/baselines/_windowing.py +0 -0
  232. {screamer-2.2.0 → screamer-2.3.0}/devtools/build_function_index.py +0 -0
  233. {screamer-2.2.0 → screamer-2.3.0}/devtools/build_help_registry.py +0 -0
  234. {screamer-2.2.0 → screamer-2.3.0}/devtools/build_topic_pages.py +0 -0
  235. {screamer-2.2.0 → screamer-2.3.0}/devtools/check_pure_headers.sh +0 -0
  236. {screamer-2.2.0 → screamer-2.3.0}/devtools/data/deribit.trades.btc-perpetual.20230804T000000.20230805T000000.csv +0 -0
  237. {screamer-2.2.0 → screamer-2.3.0}/devtools/data/deribit.trades.eth-perpetual.20230804T000000.20230805T000000.csv +0 -0
  238. {screamer-2.2.0 → screamer-2.3.0}/devtools/data/deribit_trade_download.py +0 -0
  239. {screamer-2.2.0 → screamer-2.3.0}/devtools/design_experiments/interface_v2.ipynb +0 -0
  240. {screamer-2.2.0 → screamer-2.3.0}/devtools/generate_screamer__init__.py +0 -0
  241. {screamer-2.2.0 → screamer-2.3.0}/devtools/inject_nan_footnote.py +0 -0
  242. {screamer-2.2.0 → screamer-2.3.0}/devtools/prompts/template_baseline.txt +0 -0
  243. {screamer-2.2.0 → screamer-2.3.0}/devtools/prompts/template_doc.txt +0 -0
  244. {screamer-2.2.0 → screamer-2.3.0}/devtools/report_baselines.py +0 -0
  245. {screamer-2.2.0 → screamer-2.3.0}/devtools/report_binding.py +0 -0
  246. {screamer-2.2.0 → screamer-2.3.0}/devtools/report_class_args.py +0 -0
  247. {screamer-2.2.0 → screamer-2.3.0}/devtools/report_docs.py +0 -0
  248. {screamer-2.2.0 → screamer-2.3.0}/devtools/stream_diagrams.py +0 -0
  249. {screamer-2.2.0 → screamer-2.3.0}/devtools/topics.py +0 -0
  250. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/gen_dag_oracle.py +0 -0
  251. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/gen_oracle.py +0 -0
  252. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/gen_ts_api.py +0 -0
  253. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/gen_wasm_bindings.py +0 -0
  254. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/gen_wasm_manifest.py +0 -0
  255. {screamer-2.2.0 → screamer-2.3.0}/devtools/wasm/wasm_manifest.json +0 -0
  256. {screamer-2.2.0 → screamer-2.3.0}/docs/Makefile +0 -0
  257. {screamer-2.2.0 → screamer-2.3.0}/docs/_static/css/custom.css +0 -0
  258. {screamer-2.2.0 → screamer-2.3.0}/docs/_static/diagrams/combine_latest.svg +0 -0
  259. {screamer-2.2.0 → screamer-2.3.0}/docs/_static/diagrams/dropna.svg +0 -0
  260. {screamer-2.2.0 → screamer-2.3.0}/docs/_static/diagrams/filter.svg +0 -0
  261. {screamer-2.2.0 → screamer-2.3.0}/docs/_static/diagrams/merge.svg +0 -0
  262. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/backtesting-risk.rst +0 -0
  263. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/data-prep.rst +0 -0
  264. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/indicators.rst +0 -0
  265. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/machine-learning.rst +0 -0
  266. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/math-logic.rst +0 -0
  267. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/microstructure.rst +0 -0
  268. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/smoothing-filters.rst +0 -0
  269. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/statistics.rst +0 -0
  270. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group/streaming.rst +0 -0
  271. {screamer-2.2.0 → screamer-2.3.0}/docs/by_group_index.rst +0 -0
  272. {screamer-2.2.0 → screamer-2.3.0}/docs/changelog.rst +0 -0
  273. {screamer-2.2.0 → screamer-2.3.0}/docs/choosing_an_operator.md +0 -0
  274. {screamer-2.2.0 → screamer-2.3.0}/docs/conf.py +0 -0
  275. {screamer-2.2.0 → screamer-2.3.0}/docs/conventions.md +0 -0
  276. {screamer-2.2.0 → screamer-2.3.0}/docs/function_index.txt +0 -0
  277. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_dag/Pipeline.md +0 -0
  278. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwBeta.md +0 -0
  279. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwCorr.md +0 -0
  280. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwCov.md +0 -0
  281. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwGarmanKlassVar.md +0 -0
  282. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwGarmanKlassVol.md +0 -0
  283. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwKurt.md +0 -0
  284. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwMean.md +0 -0
  285. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwParkinsonVar.md +0 -0
  286. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwParkinsonVol.md +0 -0
  287. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwRms.md +0 -0
  288. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwRogersSatchellVar.md +0 -0
  289. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwRogersSatchellVol.md +0 -0
  290. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwSkew.md +0 -0
  291. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwStd.md +0 -0
  292. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwVar.md +0 -0
  293. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_ew/EwZscore.md +0 -0
  294. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingKurt.md +0 -0
  295. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingMax.md +0 -0
  296. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingMean.md +0 -0
  297. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingMin.md +0 -0
  298. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingProd.md +0 -0
  299. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingSkew.md +0 -0
  300. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingSlope.md +0 -0
  301. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingStd.md +0 -0
  302. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingSum.md +0 -0
  303. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_expanding/ExpandingVar.md +0 -0
  304. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestL1Orders.md +0 -0
  305. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestL1Target.md +0 -0
  306. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestL1TradesOrders.md +0 -0
  307. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestOHLCOrders.md +0 -0
  308. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestOHLCTarget.md +0 -0
  309. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestPriceTarget.md +0 -0
  310. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestReport.md +0 -0
  311. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestTradesOrders.md +0 -0
  312. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BacktestTradesTarget.md +0 -0
  313. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/BayesianRegression.md +0 -0
  314. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/Drawdown.md +0 -0
  315. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/LogReturn.md +0 -0
  316. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/MaxDrawdown.md +0 -0
  317. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/PortfolioReport.md +0 -0
  318. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/ROC.md +0 -0
  319. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/ROCP.md +0 -0
  320. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/ROCR.md +0 -0
  321. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/Return.md +0 -0
  322. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingAlpha.md +0 -0
  323. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingBeta.md +0 -0
  324. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingCVaR.md +0 -0
  325. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingCalmar.md +0 -0
  326. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingCorr.md +0 -0
  327. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingCov.md +0 -0
  328. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingDownsideDeviation.md +0 -0
  329. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingHitRate.md +0 -0
  330. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingInfoRatio.md +0 -0
  331. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingLinearRegression.md +0 -0
  332. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingMaxDrawdown.md +0 -0
  333. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingOmega.md +0 -0
  334. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingPercentile.md +0 -0
  335. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingRank.md +0 -0
  336. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingResidualStd.md +0 -0
  337. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingSharpe.md +0 -0
  338. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingSortino.md +0 -0
  339. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingSpread.md +0 -0
  340. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/RollingTSF.md +0 -0
  341. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/backtest_report.md +0 -0
  342. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_fin/choosing_a_backtest_engine.md +0 -0
  343. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Abs.md +0 -0
  344. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Acos.md +0 -0
  345. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Add.md +0 -0
  346. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/And.md +0 -0
  347. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Asin.md +0 -0
  348. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Atan.md +0 -0
  349. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Atan2.md +0 -0
  350. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Cart2Polar.md +0 -0
  351. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Ceil.md +0 -0
  352. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Cos.md +0 -0
  353. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Cube.md +0 -0
  354. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Div.md +0 -0
  355. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Elu.md +0 -0
  356. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Equal.md +0 -0
  357. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Erf.md +0 -0
  358. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Erfc.md +0 -0
  359. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Exp.md +0 -0
  360. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Floor.md +0 -0
  361. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/GreaterEqual.md +0 -0
  362. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/GreaterThan.md +0 -0
  363. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Hypot.md +0 -0
  364. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/IsFinite.md +0 -0
  365. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/IsNan.md +0 -0
  366. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/LessEqual.md +0 -0
  367. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/LessThan.md +0 -0
  368. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Linear.md +0 -0
  369. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Linear2.md +0 -0
  370. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Log.md +0 -0
  371. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Mul.md +0 -0
  372. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/NegPart.md +0 -0
  373. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Not.md +0 -0
  374. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/NotEqual.md +0 -0
  375. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Or.md +0 -0
  376. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Polar2Cart.md +0 -0
  377. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/PosPart.md +0 -0
  378. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Power.md +0 -0
  379. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Relu.md +0 -0
  380. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Round.md +0 -0
  381. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Selu.md +0 -0
  382. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Sigmoid.md +0 -0
  383. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Sign.md +0 -0
  384. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Sin.md +0 -0
  385. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Softsign.md +0 -0
  386. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Sqrt.md +0 -0
  387. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Square.md +0 -0
  388. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Sub.md +0 -0
  389. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Tanh.md +0 -0
  390. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_math/Where.md +0 -0
  391. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/AmihudIlliquidity.md +0 -0
  392. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/BulkVolumeClassifier.md +0 -0
  393. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/ContOFI.md +0 -0
  394. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/EffectiveSpread.md +0 -0
  395. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/EwKyleLambda.md +0 -0
  396. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/HawkesIntensity.md +0 -0
  397. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/LeeReadySign.md +0 -0
  398. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/MicroPrice.md +0 -0
  399. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/OFI.md +0 -0
  400. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/Propagator.md +0 -0
  401. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/QueueImbalance.md +0 -0
  402. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/RealizedSpread.md +0 -0
  403. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/RollSpread.md +0 -0
  404. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/RollingKyleLambda.md +0 -0
  405. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/RollingOrderImbalance.md +0 -0
  406. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/SignedVolume.md +0 -0
  407. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/TickRuleSign.md +0 -0
  408. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_micro/VPIN.md +0 -0
  409. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/CumMax.md +0 -0
  410. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/CumMin.md +0 -0
  411. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/CumProd.md +0 -0
  412. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/CumSum.md +0 -0
  413. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Detrend.md +0 -0
  414. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Diff.md +0 -0
  415. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Diff2.md +0 -0
  416. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/First.md +0 -0
  417. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Identity.md +0 -0
  418. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Lag.md +0 -0
  419. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Last.md +0 -0
  420. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_misc/Momentum.md +0 -0
  421. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_preprocessing/Clip.md +0 -0
  422. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_preprocessing/Ffill.md +0 -0
  423. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_preprocessing/FillNa.md +0 -0
  424. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/AD.md +0 -0
  425. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/ADOSC.md +0 -0
  426. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/ADX.md +0 -0
  427. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/ADXR.md +0 -0
  428. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/ATR.md +0 -0
  429. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/BOP.md +0 -0
  430. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/BollingerBands.md +0 -0
  431. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/CCI.md +0 -0
  432. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/DEMA.md +0 -0
  433. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/DX.md +0 -0
  434. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/DonchianChannels.md +0 -0
  435. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/Hampel.md +0 -0
  436. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/HullMA.md +0 -0
  437. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/ImpulseClip.md +0 -0
  438. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/KAMA.md +0 -0
  439. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/KeltnerChannels.md +0 -0
  440. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/MACD.md +0 -0
  441. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/MFI.md +0 -0
  442. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/MinusDI.md +0 -0
  443. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/MinusDM.md +0 -0
  444. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/NATR.md +0 -0
  445. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/OBV.md +0 -0
  446. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/PlusDI.md +0 -0
  447. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/PlusDM.md +0 -0
  448. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingArgmax.md +0 -0
  449. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingArgmin.md +0 -0
  450. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingGarmanKlassVar.md +0 -0
  451. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingGarmanKlassVol.md +0 -0
  452. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingHurst.md +0 -0
  453. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingIqr.md +0 -0
  454. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingKurt.md +0 -0
  455. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMad.md +0 -0
  456. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMax.md +0 -0
  457. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMean.md +0 -0
  458. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMedian.md +0 -0
  459. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMedianAD.md +0 -0
  460. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMin.md +0 -0
  461. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingMinMax.md +0 -0
  462. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingOU.md +0 -0
  463. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingParkinsonVar.md +0 -0
  464. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingParkinsonVol.md +0 -0
  465. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingPoly1.md +0 -0
  466. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingPoly2.md +0 -0
  467. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingQuantile.md +0 -0
  468. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingRSI.md +0 -0
  469. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingRange.md +0 -0
  470. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingRms.md +0 -0
  471. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingRogersSatchellVar.md +0 -0
  472. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingRogersSatchellVol.md +0 -0
  473. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingSigmaClip.md +0 -0
  474. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingSkew.md +0 -0
  475. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingStd.md +0 -0
  476. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingSum.md +0 -0
  477. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingVWAP.md +0 -0
  478. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingVar.md +0 -0
  479. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingYangZhangVar.md +0 -0
  480. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingYangZhangVol.md +0 -0
  481. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/RollingZscore.md +0 -0
  482. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/Stoch.md +0 -0
  483. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/StochRSI.md +0 -0
  484. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/TEMA.md +0 -0
  485. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/TRIMA.md +0 -0
  486. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/TRIX.md +0 -0
  487. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/TrueRange.md +0 -0
  488. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/UltimateOscillator.md +0 -0
  489. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/WMA.md +0 -0
  490. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_rolling/WilliamsR.md +0 -0
  491. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/Butter.md +0 -0
  492. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/ButterBandpass.md +0 -0
  493. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/ButterBandstop.md +0 -0
  494. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/ButterHighpass.md +0 -0
  495. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/CycleAmplitude.md +0 -0
  496. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/CycleFrequency.md +0 -0
  497. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/CyclePhase.md +0 -0
  498. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/CycleSine.md +0 -0
  499. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/Decycler.md +0 -0
  500. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/DominantCycle.md +0 -0
  501. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/FracDiff.md +0 -0
  502. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/HilbertPhasor.md +0 -0
  503. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/Hold.md +0 -0
  504. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/InstantaneousTrendline.md +0 -0
  505. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/KalmanFilter.md +0 -0
  506. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/MAMA.md +0 -0
  507. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/MovingAverage.md +0 -0
  508. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/RoofingFilter.md +0 -0
  509. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/SchmittTrigger.md +0 -0
  510. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/SuperSmoother.md +0 -0
  511. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_signal/TrendMode.md +0 -0
  512. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/CombineLatest.md +0 -0
  513. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Delay.md +0 -0
  514. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Dropna.md +0 -0
  515. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Filter.md +0 -0
  516. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Merge.md +0 -0
  517. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Resample.md +0 -0
  518. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Select.md +0 -0
  519. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/Stream.md +0 -0
  520. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/from_pandas.md +0 -0
  521. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/split.md +0 -0
  522. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_streams/to_pandas.md +0 -0
  523. {screamer-2.2.0 → screamer-2.3.0}/docs/functions_supervised/forecast_pairs.md +0 -0
  524. {screamer-2.2.0 → screamer-2.3.0}/docs/img/3lines.png +0 -0
  525. {screamer-2.2.0 → screamer-2.3.0}/docs/img/per_column.png +0 -0
  526. {screamer-2.2.0 → screamer-2.3.0}/docs/img/speed.png +0 -0
  527. {screamer-2.2.0 → screamer-2.3.0}/docs/img/speed_chart.png +0 -0
  528. {screamer-2.2.0 → screamer-2.3.0}/docs/index.rst +0 -0
  529. {screamer-2.2.0 → screamer-2.3.0}/docs/installation.md +0 -0
  530. {screamer-2.2.0 → screamer-2.3.0}/docs/make.bat +0 -0
  531. {screamer-2.2.0 → screamer-2.3.0}/docs/microstructure.md +0 -0
  532. {screamer-2.2.0 → screamer-2.3.0}/docs/multistream.md +0 -0
  533. {screamer-2.2.0 → screamer-2.3.0}/docs/nan_and_warmup.md +0 -0
  534. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/01-quickstart-polymorphic-api.ipynb +0 -0
  535. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/02-window-statistics.ipynb +0 -0
  536. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/03-financial-indicators.ipynb +0 -0
  537. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/04-signal-processing.ipynb +0 -0
  538. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/05-nan-handling.ipynb +0 -0
  539. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/06-streaming-live-events.ipynb +0 -0
  540. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/07-multi-stream-operators.ipynb +0 -0
  541. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/08-pipelines.ipynb +0 -0
  542. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/09-bars-from-ticks.ipynb +0 -0
  543. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/10-custom-and-multi-column-bars.ipynb +0 -0
  544. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/11-microstructure-order-flow.ipynb +0 -0
  545. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/12-microstructure-price-impact.ipynb +0 -0
  546. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/13-microstructure-toxicity-and-book.ipynb +0 -0
  547. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/14-backtesting-a-signal.ipynb +0 -0
  548. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/15-event-driven-backtests.ipynb +0 -0
  549. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/16-supervised-forecasting.ipynb +0 -0
  550. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/17-filtering-and-forecasting-with-uncertainty.ipynb +0 -0
  551. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/18-pairs-and-mean-reversion.ipynb +0 -0
  552. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/19-cycle-and-spectral-analysis.ipynb +0 -0
  553. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/README.md +0 -0
  554. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/data/deribit_btc_perp_6h.csv +0 -0
  555. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/data/deribit_eth_perp_6h.csv +0 -0
  556. {screamer-2.2.0 → screamer-2.3.0}/docs/notebooks/index.md +0 -0
  557. {screamer-2.2.0 → screamer-2.3.0}/docs/performance.md +0 -0
  558. {screamer-2.2.0 → screamer-2.3.0}/docs/pipelines.md +0 -0
  559. {screamer-2.2.0 → screamer-2.3.0}/docs/polymorphic_api.md +0 -0
  560. {screamer-2.2.0 → screamer-2.3.0}/docs/references_index.rst +0 -0
  561. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-05-20-help-json-structure-refactor.md +0 -0
  562. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-02-multistream-plan1-node-core.md +0 -0
  563. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-02-multistream-plan2-merge-pace.md +0 -0
  564. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-02-multistream-plan3-combine-latest.md +0 -0
  565. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-02-multistream-plan4-filter-split-api.md +0 -0
  566. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-02-multistream-plan5-docs-identity.md +0 -0
  567. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag1-definition.md +0 -0
  568. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2a-evalop-arithmetic.md +0 -0
  569. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b1-bulk-evalop.md +0 -0
  570. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b2-wide-edge-functornode.md +0 -0
  571. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b3-combinelatest-fanout.md +0 -0
  572. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b4-compiler.md +0 -0
  573. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b5a-streaming.md +0 -0
  574. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-dag2b5b-cutover.md +0 -0
  575. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-03-demo-notebooks.md +0 -0
  576. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-04-stream-index-model-redesign.md +0 -0
  577. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-04-stream-shaping-dag-phaseA.md +0 -0
  578. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-04-stream-shaping-dag-phaseB-resample.md +0 -0
  579. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-08-windowed-aggregation-plan.md +0 -0
  580. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-09-unified-streaming-stage1-functor-core.md +0 -0
  581. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-10-unified-streaming-stage2-dag-lazy-callable.md +0 -0
  582. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-10-unified-streaming-stage3-single-input-operators.md +0 -0
  583. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-10-unified-streaming-stage3b-multi-input-operators.md +0 -0
  584. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-10-unified-streaming-stage4-resample-freq.md +0 -0
  585. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-node-core-step1-unify-node-contract.md +0 -0
  586. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-node-core-step2-operator-ports.md +0 -0
  587. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-node-core-step3a-filter-mask-gate.md +0 -0
  588. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-node-core-step3c-dropna-select-node-backing.md +0 -0
  589. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-node-core-step3e-api-collapse-camelcase.md +0 -0
  590. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-11-resample-redesign-implementation-plan.md +0 -0
  591. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-15-microstructure-flow-operators-plan.md +0 -0
  592. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-15-microstructure-flow-operators-tranche-1b-plan.md +0 -0
  593. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-18-backtest-fill-models.md +0 -0
  594. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-18-docs-navigation-redesign.md +0 -0
  595. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-20-backtest-engine-suite.md +0 -0
  596. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-20-unified-backtest-engine-api.md +0 -0
  597. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-22-bayesian-regression.md +0 -0
  598. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-22-delay-and-forecast-pairs.md +0 -0
  599. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-23-v1.0-api-hardening.md +0 -0
  600. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-23-v1.0-tier3-doc-examples.md +0 -0
  601. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-23-v1.0-tier4-onboarding.md +0 -0
  602. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-24-delay-watermark-reorder.md +0 -0
  603. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-28-resample-infobars-hold.md +0 -0
  604. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-30-adaptive-overlays.md +0 -0
  605. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-30-cycle-core.md +0 -0
  606. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-30-dmi-family.md +0 -0
  607. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-07-30-ehlers-filter-foundation.md +0 -0
  608. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-01-nanobind-migration.md +0 -0
  609. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-js-docs.md +0 -0
  610. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-wasm-phase1-base-class-split.md +0 -0
  611. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-wasm-phase2-embind-codegen.md +0 -0
  612. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-wasm-phase3-ts-api.md +0 -0
  613. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-wasm-phase5-dag-pipeline.md +0 -0
  614. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/plans/2026-08-02-wasm-phase6-packaging.md +0 -0
  615. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-05-20-help-json-structure-refactor-design.md +0 -0
  616. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-02-multistream-foundation-design.md +0 -0
  617. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-03-dag-definition-design.md +0 -0
  618. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-03-dag2-cpp-engine-design.md +0 -0
  619. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-03-demo-notebooks-design.md +0 -0
  620. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-04-notebook-docs-integration-design.md +0 -0
  621. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-04-stream-index-model-redesign.md +0 -0
  622. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-04-stream-shaping-dag-phaseA-design.md +0 -0
  623. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-04-stream-shaping-dag-phaseB-resample-design.md +0 -0
  624. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-06-dag-visualization-serialization-design.md +0 -0
  625. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-06-despiking-filters-design.md +0 -0
  626. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-06-topic-taxonomy-proposal.md +0 -0
  627. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-06-topic-taxonomy-unified-frontmatter-plan.md +0 -0
  628. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-06-topics.yml +0 -0
  629. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-08-multicolumn-bars-lazy-agg-design.md +0 -0
  630. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-08-windowed-aggregation-design.md +0 -0
  631. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-09-unified-streaming-model-design.md +0 -0
  632. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-11-node-core-step3-api-collapse-design.md +0 -0
  633. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-11-resample-redesign-freq-agg-functor-design.md +0 -0
  634. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-11-unified-cpp-node-core-architecture-design.md +0 -0
  635. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-15-microstructure-flow-operators-design.md +0 -0
  636. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-16-lazy-path-cpp-design.md +0 -0
  637. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-17-backtest-foundation-signal-design.md +0 -0
  638. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-18-backtest-fill-models-design.md +0 -0
  639. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-18-docs-navigation-redesign.md +0 -0
  640. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-20-backtest-engine-suite-design.md +0 -0
  641. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-20-schmitt-trigger-initial-state-design.md +0 -0
  642. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-20-unified-backtest-engine-api.md +0 -0
  643. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-22-bayesian-regression-design.md +0 -0
  644. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-22-delay-and-forecast-pairs-design.md +0 -0
  645. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-23-v1.0-readiness-assessment.md +0 -0
  646. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-24-delay-watermark-reorder-design.md +0 -0
  647. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-28-resample-infobars-hold-design.md +0 -0
  648. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-30-ehlers-cycle-and-dmi-tranche-design.md +0 -0
  649. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-07-30-fracdiff-design.md +0 -0
  650. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/specs/2026-08-02-wasm-js-binding-design.md +0 -0
  651. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-01-nanobind/CMakeLists.txt +0 -0
  652. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-01-nanobind/REPORT.md +0 -0
  653. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-01-nanobind/nb_spike.cpp +0 -0
  654. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-01-nanobind/smoke_test.py +0 -0
  655. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-01-nanobind/spike_helper.py +0 -0
  656. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-02-wasm/.gitignore +0 -0
  657. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-02-wasm/REPORT.md +0 -0
  658. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-02-wasm/build.sh +0 -0
  659. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-02-wasm/driver.mjs +0 -0
  660. {screamer-2.2.0 → screamer-2.3.0}/docs/superpowers/spikes/2026-08-02-wasm/spike.cpp +0 -0
  661. {screamer-2.2.0 → screamer-2.3.0}/docs/topics.yml +0 -0
  662. {screamer-2.2.0 → screamer-2.3.0}/docs/usage.md +0 -0
  663. {screamer-2.2.0 → screamer-2.3.0}/examples/lag_example.py +0 -0
  664. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ad.h +0 -0
  665. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/adosc.h +0 -0
  666. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/adx.h +0 -0
  667. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/adxr.h +0 -0
  668. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/amihud_illiquidity.h +0 -0
  669. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/arithmetic.h +0 -0
  670. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/atr.h +0 -0
  671. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_l1_orders.h +0 -0
  672. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_l1_target.h +0 -0
  673. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_l1trades_orders.h +0 -0
  674. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_ohlc_orders.h +0 -0
  675. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_ohlc_target.h +0 -0
  676. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_price_target.h +0 -0
  677. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_report.h +0 -0
  678. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_trades_orders.h +0 -0
  679. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/backtest_trades_target.h +0 -0
  680. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/bayesian_regression.h +0 -0
  681. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/bollinger_bands.h +0 -0
  682. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/bop.h +0 -0
  683. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/bulk_volume_classifier.h +0 -0
  684. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/butter.h +0 -0
  685. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/butter_bandpass.h +0 -0
  686. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/butter_bandstop.h +0 -0
  687. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/butter_highpass.h +0 -0
  688. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cci.h +0 -0
  689. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/clip.h +0 -0
  690. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/async_generator.h +0 -0
  691. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/base.h +0 -0
  692. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/buffer.h +0 -0
  693. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/cast_double.h +0 -0
  694. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/dispatch.h +0 -0
  695. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/eval_op.h +0 -0
  696. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/float_info.h +0 -0
  697. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/function_traits.h +0 -0
  698. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/functor_base.h +0 -0
  699. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/lazy_eval_iterator.h +0 -0
  700. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/market_price.h +0 -0
  701. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/math.h +0 -0
  702. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/order_statistic_tree.h +0 -0
  703. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/transform.h +0 -0
  704. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/common/transform_4.h +0 -0
  705. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cont_ofi.h +0 -0
  706. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cum_max.h +0 -0
  707. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cum_min.h +0 -0
  708. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cum_prod.h +0 -0
  709. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cum_sum.h +0 -0
  710. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cycle_amplitude.h +0 -0
  711. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cycle_frequency.h +0 -0
  712. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cycle_phase.h +0 -0
  713. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/cycle_sine.h +0 -0
  714. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/broadcast.h +0 -0
  715. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/collector.h +0 -0
  716. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/combine_latest_node.h +0 -0
  717. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/compiled_graph.h +0 -0
  718. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/delay_node.h +0 -0
  719. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/driver.h +0 -0
  720. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/dropna_node.h +0 -0
  721. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/filter_node.h +0 -0
  722. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/frame.h +0 -0
  723. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/functor_node.h +0 -0
  724. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/graph.h +0 -0
  725. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/resample_generic_node.h +0 -0
  726. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/resample_node.h +0 -0
  727. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/resample_params.h +0 -0
  728. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/resettable.h +0 -0
  729. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dag/select_node.h +0 -0
  730. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/decycler.h +0 -0
  731. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dema.h +0 -0
  732. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/block_extremum.h +0 -0
  733. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/delay_buffer.h +0 -0
  734. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/dmi_core.h +0 -0
  735. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/fir_core.h +0 -0
  736. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/hilbert_cycle.h +0 -0
  737. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/l1_fill.h +0 -0
  738. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/monotonic_deque.h +0 -0
  739. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/ohlc_fill.h +0 -0
  740. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/pnl_account.h +0 -0
  741. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/robust_window.h +0 -0
  742. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/rolling_mean.h +0 -0
  743. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/rolling_sum.h +0 -0
  744. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/start_policy.h +0 -0
  745. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/target_front.h +0 -0
  746. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/trades_fill.h +0 -0
  747. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detail/wilder_smoother.h +0 -0
  748. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/detrend.h +0 -0
  749. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/diff.h +0 -0
  750. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/diff2.h +0 -0
  751. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dominant_cycle.h +0 -0
  752. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/donchian_channels.h +0 -0
  753. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/drawdown.h +0 -0
  754. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/dx.h +0 -0
  755. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/effective_spread.h +0 -0
  756. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_beta.h +0 -0
  757. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_corr.h +0 -0
  758. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_cov.h +0 -0
  759. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_kurt.h +0 -0
  760. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_mean.h +0 -0
  761. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_rms.h +0 -0
  762. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_skew.h +0 -0
  763. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_std.h +0 -0
  764. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_var.h +0 -0
  765. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ew_zscore.h +0 -0
  766. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_kurt.h +0 -0
  767. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_max.h +0 -0
  768. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_mean.h +0 -0
  769. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_min.h +0 -0
  770. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_prod.h +0 -0
  771. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_skew.h +0 -0
  772. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_slope.h +0 -0
  773. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_std.h +0 -0
  774. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_sum.h +0 -0
  775. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/expanding_var.h +0 -0
  776. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ffill.h +0 -0
  777. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/fillna.h +0 -0
  778. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/first.h +0 -0
  779. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/frac_diff.h +0 -0
  780. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/garman_klass.h +0 -0
  781. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/geometry.h +0 -0
  782. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/hampel.h +0 -0
  783. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/hawkes_intensity.h +0 -0
  784. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/hilbert_phasor.h +0 -0
  785. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/hold.h +0 -0
  786. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/hull_ma.h +0 -0
  787. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/impulse_clip.h +0 -0
  788. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/instantaneous_trendline.h +0 -0
  789. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/kalman_filter.h +0 -0
  790. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/kama.h +0 -0
  791. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/keltner_channels.h +0 -0
  792. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/lag.h +0 -0
  793. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/last.h +0 -0
  794. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/lee_ready_sign.h +0 -0
  795. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/linear.h +0 -0
  796. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/linear2.h +0 -0
  797. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/log_return.h +0 -0
  798. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/logic.h +0 -0
  799. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/macd.h +0 -0
  800. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/mama.h +0 -0
  801. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/max_drawdown.h +0 -0
  802. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/mfi.h +0 -0
  803. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/micro_price.h +0 -0
  804. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/minus_di.h +0 -0
  805. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/minus_dm.h +0 -0
  806. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/momentum.h +0 -0
  807. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/moving_average.h +0 -0
  808. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/natr.h +0 -0
  809. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/obv.h +0 -0
  810. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ofi.h +0 -0
  811. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/parkinson.h +0 -0
  812. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/plus_di.h +0 -0
  813. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/plus_dm.h +0 -0
  814. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/portfolio_report.h +0 -0
  815. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/power.h +0 -0
  816. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/propagator.h +0 -0
  817. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/realized_spread.h +0 -0
  818. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/return.h +0 -0
  819. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/roc.h +0 -0
  820. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rocp.h +0 -0
  821. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rocr.h +0 -0
  822. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rogers_satchell.h +0 -0
  823. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/roll_spread.h +0 -0
  824. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_alpha.h +0 -0
  825. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_argmax.h +0 -0
  826. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_argmin.h +0 -0
  827. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_beta.h +0 -0
  828. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_calmar.h +0 -0
  829. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_corr.h +0 -0
  830. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_cov.h +0 -0
  831. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_cvar.h +0 -0
  832. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_downside_deviation.h +0 -0
  833. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_hit_rate.h +0 -0
  834. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_hurst.h +0 -0
  835. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_info_ratio.h +0 -0
  836. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_iqr.h +0 -0
  837. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_kurt.h +0 -0
  838. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_linear_regression.h +0 -0
  839. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_mad.h +0 -0
  840. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_max.h +0 -0
  841. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_max_drawdown.h +0 -0
  842. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_mean.h +0 -0
  843. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_median.h +0 -0
  844. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_median_ad.h +0 -0
  845. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_min.h +0 -0
  846. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_min_max.h +0 -0
  847. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_omega.h +0 -0
  848. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_ou.h +0 -0
  849. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_percentile.h +0 -0
  850. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_poly1.h +0 -0
  851. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_poly2.h +0 -0
  852. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_quantile.h +0 -0
  853. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_range.h +0 -0
  854. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_rank.h +0 -0
  855. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_residual_std.h +0 -0
  856. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_rms.h +0 -0
  857. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_rsi.h +0 -0
  858. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_sharpe.h +0 -0
  859. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_sigma_clip.h +0 -0
  860. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_skew.h +0 -0
  861. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_sortino.h +0 -0
  862. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_spread.h +0 -0
  863. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_std.h +0 -0
  864. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_sum.h +0 -0
  865. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_tsf.h +0 -0
  866. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_var.h +0 -0
  867. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/rolling_zscore.h +0 -0
  868. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/roofing_filter.h +0 -0
  869. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/schmitt_trigger.h +0 -0
  870. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/signal/bessel.h +0 -0
  871. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/signal/butter.h +0 -0
  872. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/signal/ehlers.h +0 -0
  873. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/signal/signal.h +0 -0
  874. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/stoch.h +0 -0
  875. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/stoch_rsi.h +0 -0
  876. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/collector_sink.h +0 -0
  877. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/combine_latest.h +0 -0
  878. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/driver.h +0 -0
  879. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/event.h +0 -0
  880. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/functor_node.h +0 -0
  881. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/merge_source.h +0 -0
  882. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/py_source.h +0 -0
  883. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/streams/vector_source.h +0 -0
  884. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/super_smoother.h +0 -0
  885. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/tema.h +0 -0
  886. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/tick_rule_sign.h +0 -0
  887. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/transform_functions.h +0 -0
  888. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/trend_mode.h +0 -0
  889. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/trima.h +0 -0
  890. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/trix.h +0 -0
  891. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/true_range.h +0 -0
  892. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/ultimate_oscillator.h +0 -0
  893. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/vpin.h +0 -0
  894. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/vwap.h +0 -0
  895. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/williams_r.h +0 -0
  896. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/wma.h +0 -0
  897. {screamer-2.2.0 → screamer-2.3.0}/include/screamer/yang_zhang.h +0 -0
  898. {screamer-2.2.0 → screamer-2.3.0}/js/.gitignore +0 -0
  899. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/lifecycle.md +0 -0
  900. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/parity.md +0 -0
  901. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/pipeline.md +0 -0
  902. {screamer-2.2.0 → screamer-2.3.0}/js/docs-guide/regimes.md +0 -0
  903. {screamer-2.2.0 → screamer-2.3.0}/js/scripts/pack-smoke.sh +0 -0
  904. {screamer-2.2.0 → screamer-2.3.0}/js/src/combinators.ts +0 -0
  905. {screamer-2.2.0 → screamer-2.3.0}/js/src/errors.ts +0 -0
  906. {screamer-2.2.0 → screamer-2.3.0}/js/src/generated/ops.d.ts +0 -0
  907. {screamer-2.2.0 → screamer-2.3.0}/js/src/generated/ops.ts +0 -0
  908. {screamer-2.2.0 → screamer-2.3.0}/js/src/generated/screamer.d.mts +0 -0
  909. {screamer-2.2.0 → screamer-2.3.0}/js/src/generated/screamer.mjs.d.ts +0 -0
  910. {screamer-2.2.0 → screamer-2.3.0}/js/src/index.ts +0 -0
  911. {screamer-2.2.0 → screamer-2.3.0}/js/src/loader.ts +0 -0
  912. {screamer-2.2.0 → screamer-2.3.0}/js/src/ndarray.ts +0 -0
  913. {screamer-2.2.0 → screamer-2.3.0}/js/src/node.ts +0 -0
  914. {screamer-2.2.0 → screamer-2.3.0}/js/src/pipeline.ts +0 -0
  915. {screamer-2.2.0 → screamer-2.3.0}/js/src/runtime.ts +0 -0
  916. {screamer-2.2.0 → screamer-2.3.0}/js/test/combinators.test.ts +0 -0
  917. {screamer-2.2.0 → screamer-2.3.0}/js/test/dag_lifetime.test.ts +0 -0
  918. {screamer-2.2.0 → screamer-2.3.0}/js/test/dag_parity.test.ts +0 -0
  919. {screamer-2.2.0 → screamer-2.3.0}/js/test/lifecycle.test.ts +0 -0
  920. {screamer-2.2.0 → screamer-2.3.0}/js/test/live.test.ts +0 -0
  921. {screamer-2.2.0 → screamer-2.3.0}/js/test/loader.test.ts +0 -0
  922. {screamer-2.2.0 → screamer-2.3.0}/js/test/ops.test.ts +0 -0
  923. {screamer-2.2.0 → screamer-2.3.0}/js/test/parity.test.ts +0 -0
  924. {screamer-2.2.0 → screamer-2.3.0}/js/test/pipeline.test.ts +0 -0
  925. {screamer-2.2.0 → screamer-2.3.0}/js/test/reducer.test.ts +0 -0
  926. {screamer-2.2.0 → screamer-2.3.0}/js/test/regimes.test.ts +0 -0
  927. {screamer-2.2.0 → screamer-2.3.0}/js/test/runtime.test.ts +0 -0
  928. {screamer-2.2.0 → screamer-2.3.0}/js/tsconfig.cjs.json +0 -0
  929. {screamer-2.2.0 → screamer-2.3.0}/js/tsconfig.json +0 -0
  930. {screamer-2.2.0 → screamer-2.3.0}/poetry.lock +0 -0
  931. {screamer-2.2.0 → screamer-2.3.0}/pytest.ini +0 -0
  932. {screamer-2.2.0 → screamer-2.3.0}/screamer/_async.py +0 -0
  933. {screamer-2.2.0 → screamer-2.3.0}/screamer/_functor_params.py +0 -0
  934. {screamer-2.2.0 → screamer-2.3.0}/screamer/backtest.py +0 -0
  935. {screamer-2.2.0 → screamer-2.3.0}/screamer/dag.py +0 -0
  936. {screamer-2.2.0 → screamer-2.3.0}/screamer/dag_io.py +0 -0
  937. {screamer-2.2.0 → screamer-2.3.0}/screamer/dag_viz.py +0 -0
  938. {screamer-2.2.0 → screamer-2.3.0}/screamer/data/help.json +0 -0
  939. {screamer-2.2.0 → screamer-2.3.0}/screamer/microstructure.py +0 -0
  940. {screamer-2.2.0 → screamer-2.3.0}/screamer/streams.py +0 -0
  941. {screamer-2.2.0 → screamer-2.3.0}/screamer/supervised.py +0 -0
  942. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/common/async_generator.cpp +0 -0
  943. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/common/base.cpp +0 -0
  944. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/common/dispatch.cpp +0 -0
  945. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/common/functor_base.cpp +0 -0
  946. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/common/math.cpp +0 -0
  947. {screamer-2.2.0 → screamer-2.3.0}/src/screamer/detail/start_policy.cpp +0 -0
  948. {screamer-2.2.0 → screamer-2.3.0}/tasks.py +0 -0
  949. {screamer-2.2.0 → screamer-2.3.0}/tests/__init__.py +0 -0
  950. {screamer-2.2.0 → screamer-2.3.0}/tests/_dag_oracle.py +0 -0
  951. {screamer-2.2.0 → screamer-2.3.0}/tests/param_cases.py +0 -0
  952. {screamer-2.2.0 → screamer-2.3.0}/tests/regime_helpers.py +0 -0
  953. {screamer-2.2.0 → screamer-2.3.0}/tests/test_adx_and_volume.py +0 -0
  954. {screamer-2.2.0 → screamer-2.3.0}/tests/test_arithmetic.py +0 -0
  955. {screamer-2.2.0 → screamer-2.3.0}/tests/test_atr_family.py +0 -0
  956. {screamer-2.2.0 → screamer-2.3.0}/tests/test_backtest.py +0 -0
  957. {screamer-2.2.0 → screamer-2.3.0}/tests/test_baseline_coverage.py +0 -0
  958. {screamer-2.2.0 → screamer-2.3.0}/tests/test_baseline_defaults.py +0 -0
  959. {screamer-2.2.0 → screamer-2.3.0}/tests/test_baselines.py +0 -0
  960. {screamer-2.2.0 → screamer-2.3.0}/tests/test_bayesian_regression.py +0 -0
  961. {screamer-2.2.0 → screamer-2.3.0}/tests/test_build_help_registry.py +0 -0
  962. {screamer-2.2.0 → screamer-2.3.0}/tests/test_channels_and_yz.py +0 -0
  963. {screamer-2.2.0 → screamer-2.3.0}/tests/test_combine_latest_flush.py +0 -0
  964. {screamer-2.2.0 → screamer-2.3.0}/tests/test_contract_compliance.py +0 -0
  965. {screamer-2.2.0 → screamer-2.3.0}/tests/test_cumulative.py +0 -0
  966. {screamer-2.2.0 → screamer-2.3.0}/tests/test_cycle.py +0 -0
  967. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_build.py +0 -0
  968. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_codes_sync.py +0 -0
  969. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_compile.py +0 -0
  970. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_delay.py +0 -0
  971. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_dropna.py +0 -0
  972. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_engine.py +0 -0
  973. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_exec.py +0 -0
  974. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_identity.py +0 -0
  975. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_io.py +0 -0
  976. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_lazy.py +0 -0
  977. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_public_api.py +0 -0
  978. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_resample.py +0 -0
  979. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_select.py +0 -0
  980. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_stream.py +0 -0
  981. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_viz.py +0 -0
  982. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dag_watermark.py +0 -0
  983. {screamer-2.2.0 → screamer-2.3.0}/tests/test_diff2.py +0 -0
  984. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dmi.py +0 -0
  985. {screamer-2.2.0 → screamer-2.3.0}/tests/test_doc_coverage.py +0 -0
  986. {screamer-2.2.0 → screamer-2.3.0}/tests/test_documented_defaults.py +0 -0
  987. {screamer-2.2.0 → screamer-2.3.0}/tests/test_dropna_node_backing.py +0 -0
  988. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ehlers_filters.py +0 -0
  989. {screamer-2.2.0 → screamer-2.3.0}/tests/test_evalop.py +0 -0
  990. {screamer-2.2.0 → screamer-2.3.0}/tests/test_evalop_registry.py +0 -0
  991. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ew_moments.py +0 -0
  992. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ew_pair.py +0 -0
  993. {screamer-2.2.0 → screamer-2.3.0}/tests/test_expanding.py +0 -0
  994. {screamer-2.2.0 → screamer-2.3.0}/tests/test_extremum_worst_case.py +0 -0
  995. {screamer-2.2.0 → screamer-2.3.0}/tests/test_filter_gate.py +0 -0
  996. {screamer-2.2.0 → screamer-2.3.0}/tests/test_filter_node_graph.py +0 -0
  997. {screamer-2.2.0 → screamer-2.3.0}/tests/test_first_last.py +0 -0
  998. {screamer-2.2.0 → screamer-2.3.0}/tests/test_frac_diff.py +0 -0
  999. {screamer-2.2.0 → screamer-2.3.0}/tests/test_functor_params.py +0 -0
  1000. {screamer-2.2.0 → screamer-2.3.0}/tests/test_geometry.py +0 -0
  1001. {screamer-2.2.0 → screamer-2.3.0}/tests/test_hampel.py +0 -0
  1002. {screamer-2.2.0 → screamer-2.3.0}/tests/test_hold.py +0 -0
  1003. {screamer-2.2.0 → screamer-2.3.0}/tests/test_impulse_clip.py +0 -0
  1004. {screamer-2.2.0 → screamer-2.3.0}/tests/test_input_dtypes.py +0 -0
  1005. {screamer-2.2.0 → screamer-2.3.0}/tests/test_io_size.py +0 -0
  1006. {screamer-2.2.0 → screamer-2.3.0}/tests/test_kama.py +0 -0
  1007. {screamer-2.2.0 → screamer-2.3.0}/tests/test_lazy_iterator_lifetime.py +0 -0
  1008. {screamer-2.2.0 → screamer-2.3.0}/tests/test_lazy_streaming.py +0 -0
  1009. {screamer-2.2.0 → screamer-2.3.0}/tests/test_length1_rank_dispatch.py +0 -0
  1010. {screamer-2.2.0 → screamer-2.3.0}/tests/test_linear2.py +0 -0
  1011. {screamer-2.2.0 → screamer-2.3.0}/tests/test_logic_ops.py +0 -0
  1012. {screamer-2.2.0 → screamer-2.3.0}/tests/test_macd.py +0 -0
  1013. {screamer-2.2.0 → screamer-2.3.0}/tests/test_math_transforms.py +0 -0
  1014. {screamer-2.2.0 → screamer-2.3.0}/tests/test_matrix.py +0 -0
  1015. {screamer-2.2.0 → screamer-2.3.0}/tests/test_merge_lazy_cpp.py +0 -0
  1016. {screamer-2.2.0 → screamer-2.3.0}/tests/test_microstructure.py +0 -0
  1017. {screamer-2.2.0 → screamer-2.3.0}/tests/test_module_loader.py +0 -0
  1018. {screamer-2.2.0 → screamer-2.3.0}/tests/test_momentum_family.py +0 -0
  1019. {screamer-2.2.0 → screamer-2.3.0}/tests/test_moving_averages.py +0 -0
  1020. {screamer-2.2.0 → screamer-2.3.0}/tests/test_multi_resample_dict.py +0 -0
  1021. {screamer-2.2.0 → screamer-2.3.0}/tests/test_nan_input_compliance.py +0 -0
  1022. {screamer-2.2.0 → screamer-2.3.0}/tests/test_nan_start_policy_compliance.py +0 -0
  1023. {screamer-2.2.0 → screamer-2.3.0}/tests/test_nan_warmup.py +0 -0
  1024. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ntuple_input.py +0 -0
  1025. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ohlc_volatility.py +0 -0
  1026. {screamer-2.2.0 → screamer-2.3.0}/tests/test_one_input_multi_output.py +0 -0
  1027. {screamer-2.2.0 → screamer-2.3.0}/tests/test_op_config_shape.py +0 -0
  1028. {screamer-2.2.0 → screamer-2.3.0}/tests/test_oscillators_hlc.py +0 -0
  1029. {screamer-2.2.0 → screamer-2.3.0}/tests/test_overlays.py +0 -0
  1030. {screamer-2.2.0 → screamer-2.3.0}/tests/test_parity_registration.py +0 -0
  1031. {screamer-2.2.0 → screamer-2.3.0}/tests/test_performance_risk.py +0 -0
  1032. {screamer-2.2.0 → screamer-2.3.0}/tests/test_pos_neg_part.py +0 -0
  1033. {screamer-2.2.0 → screamer-2.3.0}/tests/test_pure_headers.py +0 -0
  1034. {screamer-2.2.0 → screamer-2.3.0}/tests/test_range_volatility.py +0 -0
  1035. {screamer-2.2.0 → screamer-2.3.0}/tests/test_regression_family.py +0 -0
  1036. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_advance.py +0 -0
  1037. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_bars.py +0 -0
  1038. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_clock.py +0 -0
  1039. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_cumulative.py +0 -0
  1040. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_dict_agg.py +0 -0
  1041. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_fill.py +0 -0
  1042. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_freq_window.py +0 -0
  1043. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_functor_agg.py +0 -0
  1044. {screamer-2.2.0 → screamer-2.3.0}/tests/test_resample_ohlcv.py +0 -0
  1045. {screamer-2.2.0 → screamer-2.3.0}/tests/test_risk_stats.py +0 -0
  1046. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_argmin_argmax.py +0 -0
  1047. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_corr.py +0 -0
  1048. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_hurst.py +0 -0
  1049. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_iqr.py +0 -0
  1050. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_mad.py +0 -0
  1051. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_median_ad.py +0 -0
  1052. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_range.py +0 -0
  1053. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_rsi.py +0 -0
  1054. {screamer-2.2.0 → screamer-2.3.0}/tests/test_rolling_two_input.py +0 -0
  1055. {screamer-2.2.0 → screamer-2.3.0}/tests/test_schmitt_trigger.py +0 -0
  1056. {screamer-2.2.0 → screamer-2.3.0}/tests/test_select_node_backing.py +0 -0
  1057. {screamer-2.2.0 → screamer-2.3.0}/tests/test_signal.py +0 -0
  1058. {screamer-2.2.0 → screamer-2.3.0}/tests/test_start_policies.py +0 -0
  1059. {screamer-2.2.0 → screamer-2.3.0}/tests/test_stoch.py +0 -0
  1060. {screamer-2.2.0 → screamer-2.3.0}/tests/test_stream_columns.py +0 -0
  1061. {screamer-2.2.0 → screamer-2.3.0}/tests/test_stream_type.py +0 -0
  1062. {screamer-2.2.0 → screamer-2.3.0}/tests/test_stream_vs_batch.py +0 -0
  1063. {screamer-2.2.0 → screamer-2.3.0}/tests/test_stream_vs_generator.py +0 -0
  1064. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_combine.py +0 -0
  1065. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_combine_latest.py +0 -0
  1066. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_core.py +0 -0
  1067. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_delay.py +0 -0
  1068. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_identity.py +0 -0
  1069. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_merge.py +0 -0
  1070. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_polymorphism.py +0 -0
  1071. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_public_api.py +0 -0
  1072. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_resample.py +0 -0
  1073. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_select.py +0 -0
  1074. {screamer-2.2.0 → screamer-2.3.0}/tests/test_streams_shape.py +0 -0
  1075. {screamer-2.2.0 → screamer-2.3.0}/tests/test_supervised_forecast_pairs.py +0 -0
  1076. {screamer-2.2.0 → screamer-2.3.0}/tests/test_tensor.py +0 -0
  1077. {screamer-2.2.0 → screamer-2.3.0}/tests/test_third_party_alignment.py +0 -0
  1078. {screamer-2.2.0 → screamer-2.3.0}/tests/test_ts_api_fresh.py +0 -0
  1079. {screamer-2.2.0 → screamer-2.3.0}/tests/test_v1_api_hardening.py +0 -0
  1080. {screamer-2.2.0 → screamer-2.3.0}/tests/test_view.py +0 -0
  1081. {screamer-2.2.0 → screamer-2.3.0}/tests/test_wasm_codegen_fresh.py +0 -0
  1082. {screamer-2.2.0 → screamer-2.3.0}/tests/test_williams_r.py +0 -0
  1083. {screamer-2.2.0 → screamer-2.3.0}/tests/test_wma.py +0 -0
  1084. {screamer-2.2.0 → screamer-2.3.0}/wasm/.gitignore +0 -0
  1085. {screamer-2.2.0 → screamer-2.3.0}/wasm/build-wasm.sh +0 -0
  1086. {screamer-2.2.0 → screamer-2.3.0}/wasm/dag_bindings.cpp +0 -0
  1087. {screamer-2.2.0 → screamer-2.3.0}/wasm/dag_embind.h +0 -0
  1088. {screamer-2.2.0 → screamer-2.3.0}/wasm/embind_runtime.h +0 -0
  1089. {screamer-2.2.0 → screamer-2.3.0}/wasm/generated/bindings_wasm.cpp +0 -0
  1090. {screamer-2.2.0 → screamer-2.3.0}/wasm/smoke/dag_oracle.json +0 -0
  1091. {screamer-2.2.0 → screamer-2.3.0}/wasm/smoke/dag_smoke.mjs +0 -0
  1092. {screamer-2.2.0 → screamer-2.3.0}/wasm/smoke/oracle.json +0 -0
  1093. {screamer-2.2.0 → screamer-2.3.0}/wasm/smoke/oracle_reducer.json +0 -0
  1094. {screamer-2.2.0 → screamer-2.3.0}/wasm/smoke/smoke.mjs +0 -0
@@ -1,5 +1,5 @@
1
1
  cmake_minimum_required(VERSION 3.18)
2
- project(screamer VERSION 2.2.0 LANGUAGES CXX)
2
+ project(screamer VERSION 2.3.0 LANGUAGES CXX)
3
3
 
4
4
  # Set the default build type to Release for optimizations
5
5
  if(NOT CMAKE_BUILD_TYPE)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: screamer
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Screamingly fast financial technical indicators with C++ performance and Python simplicity, built for both time series analysis and real-time, event-driven streaming.
5
5
  Keywords: streaming,indicators,real-time,algorithmic,trading,low-latency
6
6
  Author-Email: Thijs van den Berg <thijs@sitmo.com>
@@ -25,6 +25,21 @@ await ready();
25
25
  const op = RollingMean(3);
26
26
  ```
27
27
 
28
+ ## Node, bundlers, and the browser
29
+
30
+ The import above works in Node (18+) and through any bundler (Vite, Next.js, webpack,
31
+ esbuild), which inlines the embedded-WASM module. In a plain browser with no build step,
32
+ import from a CDN URL instead (browser use needs 2.2.1 or newer):
33
+
34
+ ```html
35
+ <script type="module">
36
+ import { ready, RollingMean }
37
+ from "https://cdn.jsdelivr.net/npm/@screamer-labs/screamer@2.2.1/dist/index.js";
38
+ await ready();
39
+ const sma = RollingMean(3);
40
+ </script>
41
+ ```
42
+
28
43
  ## Calling an op: four input regimes
29
44
 
30
45
  An op factory like `RollingMean(3)` returns a callable. That callable dispatches on its
@@ -94,8 +109,16 @@ package: same operators, same causal semantics, same numerics. Its outputs are
94
109
  verified against the Python package's outputs, and batch and streaming calls on the
95
110
  same data give identical results.
96
111
 
112
+ ## Live demo
113
+
114
+ Watch the live trade dashboard in the browser:
115
+ [screamer-labs.github.io/screamer/live-trades.html](https://screamer-labs.github.io/screamer/live-trades.html).
116
+ It shows low-lag price, volume-weighted fair value, order-flow pressure, and an optional VPIN view. The self-contained source is [`examples/live-trades.html`](examples/live-trades.html).
117
+
97
118
  ## Learn more
98
119
 
99
- Full documentation, the function reference, and example notebooks are at
120
+ The JavaScript reference and guide are at
121
+ [screamer-labs.github.io/screamer](https://screamer-labs.github.io/screamer/). Full documentation,
122
+ the function reference, and example notebooks are at
100
123
  [screamer.readthedocs.io](https://screamer.readthedocs.io/en/latest/). Source and
101
124
  issues live at [github.com/screamer-labs/screamer](https://github.com/screamer-labs/screamer).
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: Node, bundlers, and the browser
3
+ ---
4
+
5
+ # Node, bundlers, and the browser
6
+
7
+ screamer.js is one package that runs in Node and in the browser. The API is identical everywhere;
8
+ only how you point the runtime at the package differs. In every environment the rule is the same:
9
+ call `await ready()` once before constructing any operator, because the WebAssembly module loads
10
+ asynchronously.
11
+
12
+ Browser use (a bundler or a CDN) requires version **2.2.1 or newer**. Earlier versions load only
13
+ under Node.
14
+
15
+ ## Node
16
+
17
+ Node 18 or newer. Install and import by name:
18
+
19
+ ```js
20
+ // npm i @screamer-labs/screamer
21
+ import { ready, RollingMean } from "@screamer-labs/screamer";
22
+
23
+ await ready();
24
+ const sma = RollingMean(3);
25
+ console.log(sma([1, 2, 3, 4])); // [ NaN, NaN, 2, 3 ]
26
+ ```
27
+
28
+ The package ships one self-contained module with the WebAssembly embedded, so there is no separate
29
+ `.wasm` file to resolve.
30
+
31
+ ## Browser with a bundler
32
+
33
+ Vite, Next.js, webpack, Rollup, esbuild, and similar tools need no special configuration. Install
34
+ and import exactly as in Node; the bundler inlines the embedded-WASM module into your output:
35
+
36
+ ```js
37
+ // npm i @screamer-labs/screamer
38
+ import { ready, RollingMean } from "@screamer-labs/screamer";
39
+
40
+ await ready();
41
+ const sma = RollingMean(3);
42
+ ```
43
+
44
+ The bare specifier `@screamer-labs/screamer` resolves through the bundler (or an import map). A raw
45
+ browser cannot resolve a bare specifier, which is what the CDN form below handles.
46
+
47
+ ## Browser without a build step (CDN)
48
+
49
+ Import from a full URL inside a module script. jsDelivr serves the published module directly:
50
+
51
+ ```html
52
+ <script type="module">
53
+ import { ready, RollingMean }
54
+ from "https://cdn.jsdelivr.net/npm/@screamer-labs/screamer@2.2.1/dist/index.js";
55
+
56
+ await ready();
57
+
58
+ const sma = RollingMean(3);
59
+ console.log(Array.from(sma(new Float64Array([1, 2, 3, 4])))); // [ NaN, NaN, 2, 3 ]
60
+ </script>
61
+ ```
62
+
63
+ Pin the version (`@2.2.1`) so loads are reproducible. The module embeds its WebAssembly, so nothing
64
+ else needs to be fetched or configured.
65
+
66
+ To avoid a third-party origin (for offline use, a strict Content-Security-Policy, or full control),
67
+ copy the package's `dist/` directory next to your page and import it with a relative URL. The
68
+ [Live demo](./live-demo.md) does this; its
69
+ [source](https://github.com/screamer-labs/screamer/blob/main/js/examples/live-trades.html) shows
70
+ the pattern.
71
+
72
+ ## The rule in every environment
73
+
74
+ `await ready()` resolves the WebAssembly module once and caches it; a second call awaits the same
75
+ load. Construct operators after it, never before. Each op owns memory on the WASM side, so call
76
+ `.dispose()` when you are done with it (or use `using` where your runtime supports it). See
77
+ [Lifecycle](./lifecycle.md).
78
+
79
+ Requirements: Node 18+, or any browser with WebAssembly, which is every current browser on desktop
80
+ and mobile.
@@ -9,6 +9,10 @@ npm i @screamer-labs/screamer
9
9
  The package ships one self-contained WASM module. There is no separate `.wasm` asset to fetch
10
10
  and no build step on the consumer side.
11
11
 
12
+ The examples below use a bare import, which resolves under Node or a bundler. To load screamer in
13
+ the browser (through a bundler or straight from a CDN with no build step), see
14
+ [Node, bundlers, and the browser](./environments.md).
15
+
12
16
  ## Load the module once
13
17
 
14
18
  screamer.js compiles to WebAssembly, and WebAssembly modules instantiate asynchronously
@@ -37,4 +37,5 @@ RollingMean(3)(new Float64Array([1, 2, 3, 4])); // Float64Array [NaN, NaN, 2, 3]
37
37
  ```
38
38
 
39
39
  Start with [Getting started](./getting-started.md) for the async load step and your first
40
- `Pipeline`.
40
+ `Pipeline`, or watch the operators run on a live trade feed in the
41
+ [Live demo](./live-demo.md).
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: Live demo
3
+ ---
4
+
5
+ # Live demo
6
+
7
+ **[Open the live demo](https://screamer-labs.github.io/screamer/live-trades.html)** to read a live
8
+ crypto tape with screamer, in your browser.
9
+
10
+ Live trades are noisy. The demo connects to a public exchange feed (Coinbase or Binance, no API
11
+ key) and turns the raw prints into three things a trader actually wants:
12
+
13
+ - **A low-lag price.** `RollingPoly1(window, 0)` is the endpoint of a rolling linear fit. It tracks
14
+ price with far less lag than a moving average, so it de-noises the tape without falling behind.
15
+ - **A volume-weighted fair value.** A VWMA built from `RollingSum(price * size) / RollingSum(size)`
16
+ shows where the volume actually traded, not just where the last print landed.
17
+ - **Order-flow pressure.** An EW-smoothed, normalized signed-volume imbalance shows whether buyers
18
+ are lifting offers or sellers are hitting bids right now. It is a leading read on short-term
19
+ direction (drawn as a green/red strip under the price), not a trade signal.
20
+
21
+ The **view** control switches the x-axis between a trade-count clock and a volume clock. On a
22
+ volume clock each bar is a fixed slice of traded volume, so a burst of micro-trades collapses into
23
+ a couple of bars instead of stretching across the chart.
24
+
25
+ The **signal** control switches the lower panel between the existing order-flow pressure view and
26
+ VPIN. VPIN uses 0.5 BTC volume buckets and reports how one-sided the recent signed flow has been.
27
+
28
+ Each operator is fed one trade at a time as it arrives:
29
+
30
+ ```js
31
+ import { ready, RollingPoly1, RollingSum, EwMean } from "@screamer-labs/screamer";
32
+
33
+ await ready();
34
+
35
+ const lowLag = RollingPoly1(30, 0); // low-lag price
36
+ const sumPV = RollingSum(50), sumV = RollingSum(50); // volume-weighted fair value
37
+ const flowNet = EwMean(undefined, 50), flowAbs = EwMean(undefined, 50); // order-flow pressure
38
+
39
+ // sign: +1 when a buyer lifted the offer, -1 when a seller hit the bid
40
+ function onTrade(price, size, sign) {
41
+ const denoised = lowLag(price);
42
+ const fair = sumPV(price * size) / sumV(size);
43
+ const pressure = flowNet(sign * size) / flowAbs(size); // in [-1, 1], positive = buyers leaning
44
+ // ...draw denoised and fair over the trades, pressure as a green/red strip
45
+ }
46
+ ```
47
+
48
+ The same operators run just as well on a stored array as on this live feed, so a study done on
49
+ history carries over to production unchanged. See [Getting started](./getting-started.md) for the
50
+ input regimes and [Node, bundlers, and the browser](./environments.md) for how to load screamer in
51
+ each environment.
52
+
53
+ ## Running it yourself
54
+
55
+ The demo is a single self-contained HTML file at
56
+ [`js/examples/live-trades.html`](https://github.com/screamer-labs/screamer/blob/main/js/examples/live-trades.html).
57
+ It loads screamer from a CDN, so it needs internet access for both the module and the trade feed.
58
+ If the chart stays empty, the selected market may be restricted in your region; switch markets in
59
+ the demo.
@@ -0,0 +1,441 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>screamer.js — reading the live tape</title>
7
+ <style>
8
+ :root {
9
+ --bg: #0d1117; --panel: #161b22; --line: #232a33;
10
+ --fg: #e6edf3; --muted: #8b949e;
11
+ --raw: #6e7681;
12
+ --lowlag: #f5a623; --fair: #58a6ff;
13
+ --buy: #3fb950; --sell: #f85149;
14
+ --live: #3fb950; --warn: #d29922; --dead: #f85149;
15
+ }
16
+ * { box-sizing: border-box; }
17
+ html, body { margin: 0; height: 100%; }
18
+ body {
19
+ background: var(--bg); color: var(--fg);
20
+ font: 14px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
21
+ display: flex; flex-direction: column; min-height: 100%;
22
+ }
23
+ header { padding: 16px 20px 8px; }
24
+ h1 { margin: 0; font-size: 17px; font-weight: 650; letter-spacing: .2px; }
25
+ h1 .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: #58a6ff; }
26
+ .sub { color: var(--muted); font-size: 12.5px; margin-top: 3px; max-width: 760px; }
27
+ .bar { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: center; padding: 6px 20px 12px; }
28
+ .bar label { color: var(--muted); font-size: 12px; margin-right: 5px; }
29
+ select, button {
30
+ background: var(--panel); color: var(--fg); border: 1px solid var(--line);
31
+ border-radius: 6px; padding: 5px 9px; font-size: 12.5px; cursor: pointer;
32
+ }
33
+ button:hover, select:hover { border-color: #3d4653; }
34
+ .pill {
35
+ display: inline-flex; align-items: center; gap: 7px;
36
+ background: var(--panel); border: 1px solid var(--line);
37
+ border-radius: 999px; padding: 4px 11px; font-size: 12px; color: var(--muted);
38
+ }
39
+ .pill b { color: var(--fg); font-weight: 600; }
40
+ .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--muted); }
41
+ .dot.live { background: var(--live); box-shadow: 0 0 0 3px rgba(63,185,80,.18); }
42
+ .dot.connecting { background: var(--warn); }
43
+ .dot.dead { background: var(--dead); }
44
+ .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
45
+ #bias.buy { color: var(--buy); border-color: rgba(63,185,80,.4); }
46
+ #bias.sell { color: var(--sell); border-color: rgba(248,81,73,.4); }
47
+ .grow { flex: 1; }
48
+ #wrap { flex: 1; padding: 0 12px 4px; min-height: 320px; position: relative; }
49
+ canvas { width: 100%; height: 100%; display: block; }
50
+ #overlay {
51
+ position: absolute; inset: 0; display: none; align-items: center; justify-content: center;
52
+ text-align: center; padding: 24px; color: var(--muted);
53
+ }
54
+ #overlay .box { max-width: 460px; }
55
+ #overlay code { color: #f0883e; font-family: ui-monospace, Menlo, monospace; }
56
+ .legend { display: flex; flex-wrap: wrap; gap: 8px 18px; padding: 8px 20px 4px; }
57
+ .lg { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; }
58
+ .sw { width: 22px; height: 3px; border-radius: 2px; }
59
+ .sw.sq { width: 11px; height: 11px; border-radius: 2px; }
60
+ .lg .nm { color: var(--muted); }
61
+ .lg .vl { font-family: ui-monospace, Menlo, monospace; }
62
+ footer { color: var(--muted); font-size: 11.5px; padding: 4px 20px 14px; }
63
+ footer a { color: #58a6ff; text-decoration: none; }
64
+ </style>
65
+ </head>
66
+ <body>
67
+ <header>
68
+ <h1><span class="mono">screamer.js</span> &nbsp;·&nbsp; reading the live tape</h1>
69
+ <div class="sub">
70
+ Live trades are noisy. This reads the tape for you: a low-lag estimate of where price really
71
+ is, a volume-weighted fair value, and the order-flow pressure showing whether buyers or
72
+ sellers are leaning on the market right now.
73
+ </div>
74
+ </header>
75
+
76
+ <div class="bar">
77
+ <span><label>market</label>
78
+ <select id="source">
79
+ <option value="coinbase">Coinbase · BTC-USD</option>
80
+ <option value="binance">Binance · BTC/USDT</option>
81
+ </select>
82
+ </span>
83
+ <span><label>view</label>
84
+ <select id="window">
85
+ <option value="count:240" selected>240 trades</option>
86
+ <option value="count:480">480 trades</option>
87
+ <option value="vol:6">volume clock · fine</option>
88
+ <option value="vol:20">volume clock · coarse</option>
89
+ </select>
90
+ </span>
91
+ <span><label>signal</label>
92
+ <select id="signal">
93
+ <option value="flow" selected>order-flow pressure</option>
94
+ <option value="vpin">VPIN · 0.5 BTC buckets</option>
95
+ </select>
96
+ </span>
97
+ <button id="pause">Pause</button>
98
+ <button id="reset">Reset</button>
99
+ <span class="grow"></span>
100
+ <span class="pill"><span id="dot" class="dot"></span><span id="status">starting…</span></span>
101
+ <span class="pill">price <b id="last" class="mono">—</b></span>
102
+ <span class="pill" id="bias"><span id="signalLabel">flow</span> <b id="biastxt">—</b></span>
103
+ <span class="pill"><b id="rate">0</b>&nbsp;trades/s</span>
104
+ </div>
105
+
106
+ <div id="wrap">
107
+ <canvas id="chart"></canvas>
108
+ <div id="overlay"><div class="box"></div></div>
109
+ </div>
110
+
111
+ <div class="legend">
112
+ <span class="lg"><span class="sw" style="background:var(--lowlag)"></span><span class="nm">low-lag price</span> <span class="vl" id="v_lowlag">—</span></span>
113
+ <span class="lg"><span class="sw" style="background:var(--fair)"></span><span class="nm">fair value (volume-weighted)</span> <span class="vl" id="v_fair">—</span></span>
114
+ <span class="lg"><span class="sw" style="background:var(--raw)"></span><span class="nm">trades</span></span>
115
+ <span class="lg"><span class="sw sq" style="background:var(--buy)"></span><span class="sw sq" style="background:var(--sell)"></span><span class="nm" id="signalLegend">order-flow pressure (buy / sell)</span></span>
116
+ </div>
117
+
118
+ <footer>
119
+ Powered by <a href="https://www.npmjs.com/package/@screamer-labs/screamer" target="_blank" rel="noopener">@screamer-labs/screamer</a>.
120
+ Public trade feeds, no API key. Order flow is a leading read on short-term direction, not a
121
+ trade signal. If a market shows no data it may be geo-restricted, switch markets above.
122
+ </footer>
123
+
124
+ <script type="module">
125
+ // ---------------------------------------------------------------------------
126
+ // Load screamer.js. On the docs site a same-origin bundle sits next to this
127
+ // page (built to a broad target, most robust across browsers incl. mobile
128
+ // Safari); the CDN entries are fallbacks when the file is opened standalone.
129
+ // ---------------------------------------------------------------------------
130
+ const SOURCES = [
131
+ new URL("./vendor/screamer/index.js", import.meta.url).href, // same-origin (docs site)
132
+ "https://cdn.jsdelivr.net/npm/@screamer-labs/screamer@2.2.1/dist/index.js", // raw published ESM
133
+ "https://esm.sh/@screamer-labs/screamer@2.2.1", // transformed fallback
134
+ ];
135
+ async function loadScreamer() {
136
+ const errs = [];
137
+ for (const url of SOURCES) {
138
+ try { return await import(url); }
139
+ catch (e) {
140
+ const where = url.startsWith("http") ? new URL(url).host : "same-origin";
141
+ errs.push(where + " — " + String((e && e.message) || e));
142
+ }
143
+ }
144
+ throw new Error(errs.join("\n"));
145
+ }
146
+
147
+ const overlay = document.getElementById("overlay");
148
+ function fail(html) { overlay.querySelector(".box").innerHTML = html; overlay.style.display = "flex"; }
149
+
150
+ let S;
151
+ try {
152
+ S = await loadScreamer();
153
+ await S.ready();
154
+ } catch (e) {
155
+ const detail = String((e && e.message) || e)
156
+ .replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\n/g, "<br>");
157
+ fail(`Could not load <code>@screamer-labs/screamer</code>.<br><br>` +
158
+ `This page needs internet access for the module and the trade feed.<br><br>` +
159
+ `<small style="color:#f0883e">${detail}</small>`);
160
+ throw e;
161
+ }
162
+
163
+ // ---------------------------------------------------------------------------
164
+ // The signals, all screamer operators fed one trade at a time:
165
+ // low-lag price RollingPoly1(win, 0) endpoint of a rolling linear fit
166
+ // fair value RollingSum(pv)/RollingSum(v) volume-weighted price (VWMA)
167
+ // order flow EwMean(signed vol) / EwMean(|vol|) buy-vs-sell pressure in [-1,1]
168
+ // Rebuilt on reset / market change so state starts clean.
169
+ // ---------------------------------------------------------------------------
170
+ const POLY_WIN = 30, VWMA_WIN = 50, FLOW_SPAN = 50;
171
+ const VPIN_BUCKET = 0.5, VPIN_BUCKETS = 20;
172
+ let ops;
173
+ function buildOps() {
174
+ ops = {
175
+ poly: S.RollingPoly1(POLY_WIN, 0),
176
+ sumPV: S.RollingSum(VWMA_WIN),
177
+ sumV: S.RollingSum(VWMA_WIN),
178
+ ewS: S.EwMean(undefined, FLOW_SPAN),
179
+ ewA: S.EwMean(undefined, FLOW_SPAN),
180
+ vpin: S.VPIN(VPIN_BUCKET, VPIN_BUCKETS),
181
+ };
182
+ }
183
+ function disposeOps() { if (ops) for (const k in ops) ops[k].dispose(); }
184
+
185
+ let N = 240; // samples shown
186
+ let prices = [], lowlag = [], fair = [], flow = [], vpin = [];
187
+ let vpinLatest = NaN, signalName = "flow";
188
+ let paused = false, dirty = true;
189
+ const arrivals = [];
190
+
191
+ // The clock decides what one plotted sample is: a single trade (count clock), or
192
+ // a fixed slice of volume (volume clock). A volume clock collapses a burst of
193
+ // micro-trades into a few bars instead of a long stretch of near-flat prints.
194
+ let clock = { mode: "count", factor: 0 };
195
+ let bucket = null, avgSize = 0;
196
+
197
+ function reset() {
198
+ disposeOps(); buildOps();
199
+ prices = []; lowlag = []; fair = []; flow = []; vpin = [];
200
+ vpinLatest = NaN; bucket = null; avgSize = 0;
201
+ arrivals.length = 0; dirty = true;
202
+ }
203
+ buildOps();
204
+
205
+ function onTrade(price, size, sign) {
206
+ arrivals.push(performance.now()); // trades/sec always counts raw trades
207
+ document.getElementById("last").textContent = fmt(price);
208
+ avgSize = avgSize > 0 ? avgSize * 0.99 + size * 0.01 : size; // slow EWMA, burst-resistant
209
+ const buy = sign > 0 ? size : 0, sell = sign < 0 ? size : 0;
210
+ vpinLatest = ops.vpin(buy, sell);
211
+
212
+ if (clock.mode === "count") { addSample(price, size, sign * size); return; }
213
+
214
+ // Volume clock: accumulate into a bucket until it holds a target slice of
215
+ // volume, then emit one bar (its VWAP, its volume, its net signed flow).
216
+ if (!bucket) bucket = { vol: 0, signed: 0, pv: 0 };
217
+ bucket.vol += size; bucket.signed += sign * size; bucket.pv += price * size;
218
+ if (bucket.vol >= avgSize * clock.factor) {
219
+ addSample(bucket.pv / bucket.vol, bucket.vol, bucket.signed);
220
+ bucket = null;
221
+ }
222
+ }
223
+
224
+ // One plotted sample, fed through the operators. `signedVol` is net signed
225
+ // volume (sign*size for a single trade, the bucket's net for a volume bar).
226
+ function addSample(price, size, signedVol) {
227
+ const ll = ops.poly(price);
228
+ const pv = ops.sumPV(price * size), v = ops.sumV(size);
229
+ const vw = v > 0 ? pv / v : NaN;
230
+ const sv = ops.ewS(signedVol), av = ops.ewA(size);
231
+ const of = av > 0 ? Math.max(-1, Math.min(1, sv / av)) : 0;
232
+
233
+ prices.push(price); lowlag.push(ll); fair.push(vw); flow.push(of); vpin.push(vpinLatest);
234
+ while (prices.length > N) { prices.shift(); lowlag.shift(); fair.shift(); flow.shift(); vpin.shift(); }
235
+ dirty = true;
236
+ }
237
+
238
+ // ---------------------------------------------------------------------------
239
+ // Public trade feeds. Each yields { price, size, sign } where sign is the
240
+ // aggressor: +1 when a buyer lifted the offer, -1 when a seller hit the bid.
241
+ // ---------------------------------------------------------------------------
242
+ const FEEDS = {
243
+ coinbase: {
244
+ label: "Coinbase BTC-USD",
245
+ url: "wss://ws-feed.exchange.coinbase.com",
246
+ onopen: (ws) => ws.send(JSON.stringify({
247
+ type: "subscribe", product_ids: ["BTC-USD"], channels: ["matches"],
248
+ })),
249
+ parse: (m) => {
250
+ if (m.type !== "match" && m.type !== "last_match") return null;
251
+ const price = parseFloat(m.price), size = parseFloat(m.size);
252
+ if (!Number.isFinite(price) || !Number.isFinite(size)) return null;
253
+ // Coinbase `side` is the resting (maker) side; the aggressor is the opposite.
254
+ return { price, size, sign: m.side === "sell" ? 1 : -1 };
255
+ },
256
+ },
257
+ binance: {
258
+ label: "Binance BTC/USDT",
259
+ url: "wss://stream.binance.com:9443/ws/btcusdt@trade",
260
+ onopen: null,
261
+ parse: (m) => {
262
+ if (m.e !== "trade") return null;
263
+ const price = parseFloat(m.p), size = parseFloat(m.q);
264
+ if (!Number.isFinite(price) || !Number.isFinite(size)) return null;
265
+ // m.m = buyer is the maker, so the seller is the aggressor.
266
+ return { price, size, sign: m.m ? -1 : 1 };
267
+ },
268
+ },
269
+ };
270
+
271
+ let ws = null, source = "coinbase", retry = 0, reconnectTimer = null;
272
+
273
+ function setStatus(state, text) {
274
+ document.getElementById("dot").className = "dot " + (state || "");
275
+ document.getElementById("status").textContent = text;
276
+ }
277
+ function connect() {
278
+ clearTimeout(reconnectTimer);
279
+ const feed = FEEDS[source];
280
+ setStatus("connecting", "connecting to " + feed.label + "…");
281
+ let sock;
282
+ try { sock = new WebSocket(feed.url); } catch { scheduleReconnect(); return; }
283
+ ws = sock;
284
+ sock.onopen = () => { retry = 0; if (feed.onopen) feed.onopen(sock); setStatus("live", "live · " + feed.label); };
285
+ sock.onmessage = (ev) => {
286
+ if (paused) return;
287
+ let m; try { m = JSON.parse(ev.data); } catch { return; }
288
+ const t = feed.parse(m);
289
+ if (t) onTrade(t.price, t.size, t.sign);
290
+ };
291
+ sock.onerror = () => { try { sock.close(); } catch {} };
292
+ sock.onclose = () => { if (sock !== ws) return; setStatus("dead", "disconnected · retrying…"); scheduleReconnect(); };
293
+ }
294
+ function scheduleReconnect() { retry = Math.min(retry + 1, 6); reconnectTimer = setTimeout(connect, 400 * retry); }
295
+ function switchFeed(next) { source = next; if (ws) { ws.onclose = null; try { ws.close(); } catch {} ws = null; } reset(); connect(); }
296
+
297
+ // ---------------------------------------------------------------------------
298
+ // Rendering: a price panel (raw trades, low-lag price, fair value) over a slim
299
+ // order-flow strip (buy pressure green above zero, sell pressure red below).
300
+ // The price axis is scaled from the raw trades only.
301
+ // ---------------------------------------------------------------------------
302
+ const canvas = document.getElementById("chart");
303
+ const ctx = canvas.getContext("2d");
304
+ let cssW = 0, cssH = 0, dpr = 1;
305
+ function resize() {
306
+ const r = canvas.getBoundingClientRect();
307
+ cssW = Math.max(320, r.width); cssH = Math.max(300, r.height);
308
+ dpr = window.devicePixelRatio || 1;
309
+ canvas.width = Math.round(cssW * dpr); canvas.height = Math.round(cssH * dpr);
310
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
311
+ dirty = true;
312
+ }
313
+ window.addEventListener("resize", resize);
314
+
315
+ const PADL = 12, PADR = 74, PADT = 12, PADB = 18;
316
+
317
+ function fmt(v) {
318
+ return Number.isFinite(v) ? v.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : "—";
319
+ }
320
+ function lastFinite(a) { for (let i = a.length - 1; i >= 0; i--) if (Number.isFinite(a[i])) return a[i]; return NaN; }
321
+
322
+ function render() {
323
+ requestAnimationFrame(render);
324
+ const now = performance.now();
325
+ while (arrivals.length && now - arrivals[0] > 1000) arrivals.shift();
326
+ document.getElementById("rate").textContent = arrivals.length;
327
+
328
+ if (!dirty) return;
329
+ dirty = false;
330
+
331
+ ctx.clearRect(0, 0, cssW, cssH);
332
+ const plotW = cssW - PADL - PADR, plotH = cssH - PADT - PADB;
333
+ const priceH = plotH * 0.70, gap = plotH * 0.07, flowH = plotH - priceH - gap;
334
+ const priceTop = PADT, flowTop = PADT + priceH + gap;
335
+
336
+ const finite = prices.filter(Number.isFinite);
337
+ if (finite.length < 2) {
338
+ ctx.fillStyle = "#8b949e"; ctx.font = "13px -apple-system, sans-serif"; ctx.textAlign = "center";
339
+ ctx.fillText("waiting for trades…", PADL + plotW / 2, priceTop + priceH / 2);
340
+ return;
341
+ }
342
+
343
+ let lo = Math.min(...finite), hi = Math.max(...finite);
344
+ for (const v of fair) if (Number.isFinite(v)) { lo = Math.min(lo, v); hi = Math.max(hi, v); }
345
+ if (hi - lo < 1e-9) { hi += 1; lo -= 1; }
346
+ const pad = (hi - lo) * 0.08; lo -= pad; hi += pad;
347
+
348
+ const len = prices.length, step = plotW / (N - 1);
349
+ const X = (i) => PADL + plotW - (len - 1 - i) * step;
350
+ const Yp = (p) => priceTop + (1 - (p - lo) / (hi - lo)) * priceH;
351
+ const Yf = (v) => flowTop + (1 - (v + 1) / 2) * flowH;
352
+ const zeroY = Yf(0);
353
+
354
+ // price grid + right labels
355
+ ctx.strokeStyle = "#232a33"; ctx.fillStyle = "#8b949e"; ctx.lineWidth = 1;
356
+ ctx.font = "11px ui-monospace, Menlo, monospace"; ctx.textAlign = "left";
357
+ for (let k = 0; k <= 4; k++) {
358
+ const y = priceTop + (k / 4) * priceH;
359
+ ctx.beginPath(); ctx.moveTo(PADL, y); ctx.lineTo(PADL + plotW, y); ctx.stroke();
360
+ ctx.fillText(fmt(hi - (k / 4) * (hi - lo)), PADL + plotW + 8, y + 3);
361
+ }
362
+
363
+ // price lines, clipped to the price panel
364
+ ctx.save(); ctx.beginPath(); ctx.rect(PADL, priceTop, plotW, priceH); ctx.clip();
365
+ line(prices, "#6e7681", 1, 0.5, X, Yp);
366
+ line(fair, "#58a6ff", 1.4, 0.9, X, Yp);
367
+ line(lowlag, "#f5a623", 1.9, 1, X, Yp);
368
+ ctx.restore();
369
+
370
+ // The lower panel can show either the existing order-flow read or VPIN.
371
+ const nowFlow = lastFinite(flow), nowVpin = lastFinite(vpin);
372
+ document.getElementById("v_lowlag").textContent = fmt(lastFinite(lowlag));
373
+ document.getElementById("v_fair").textContent = fmt(lastFinite(fair));
374
+ const pill = document.getElementById("bias"), txt = document.getElementById("biastxt");
375
+ document.getElementById("signalLabel").textContent = signalName === "vpin" ? "VPIN" : "flow";
376
+ document.getElementById("signalLegend").textContent = signalName === "vpin" ? "VPIN (0–1, higher = more one-sided)" : "order-flow pressure (buy / sell)";
377
+ if (signalName === "vpin") {
378
+ const Yv = (v) => flowTop + (1 - v) * flowH;
379
+ ctx.strokeStyle = "#2c333d"; ctx.beginPath(); ctx.moveTo(PADL, Yv(0.5)); ctx.lineTo(PADL + plotW, Yv(0.5)); ctx.stroke();
380
+ ctx.fillStyle = "#8b949e"; ctx.textAlign = "left"; ctx.fillText("VPIN", PADL + 2, flowTop + 10);
381
+ ctx.font = "11px ui-monospace, Menlo, monospace"; ctx.fillText("1.00", PADL + plotW + 8, flowTop + 3); ctx.fillText("0.00", PADL + plotW + 8, flowTop + flowH + 3);
382
+ line(vpin, "#d29922", 1.8, 1, X, Yv);
383
+ pill.className = "pill"; txt.textContent = Number.isFinite(nowVpin) ? nowVpin.toFixed(2) : "warming up";
384
+ } else {
385
+ // order-flow strip: zero line, green fill above, red fill below
386
+ ctx.strokeStyle = "#2c333d"; ctx.beginPath(); ctx.moveTo(PADL, zeroY); ctx.lineTo(PADL + plotW, zeroY); ctx.stroke();
387
+ ctx.fillStyle = "#8b949e"; ctx.textAlign = "left"; ctx.fillText("order flow", PADL + 2, flowTop + 10);
388
+ fillFlow(flow, X, Yf, zeroY, "#3fb950", PADL, flowTop, plotW, zeroY - flowTop);
389
+ fillFlow(flow, X, Yf, zeroY, "#f85149", PADL, zeroY, plotW, flowTop + flowH - zeroY);
390
+ if (Number.isFinite(nowFlow) && nowFlow > 0.05) { pill.className = "pill buy"; txt.textContent = "buyers " + Math.round(nowFlow * 100) + "%"; }
391
+ else if (Number.isFinite(nowFlow) && nowFlow < -0.05) { pill.className = "pill sell"; txt.textContent = "sellers " + Math.round(-nowFlow * 100) + "%"; }
392
+ else { pill.className = "pill"; txt.textContent = "balanced"; }
393
+ }
394
+ }
395
+
396
+ function line(arr, color, w, alpha, X, Yp) {
397
+ ctx.strokeStyle = color; ctx.lineWidth = w; ctx.globalAlpha = alpha; ctx.lineJoin = "round";
398
+ ctx.beginPath(); let pen = false;
399
+ for (let i = 0; i < arr.length; i++) {
400
+ const v = arr[i];
401
+ if (!Number.isFinite(v)) { pen = false; continue; }
402
+ const x = X(i), y = Yp(v);
403
+ if (pen) ctx.lineTo(x, y); else { ctx.moveTo(x, y); pen = true; }
404
+ }
405
+ ctx.stroke(); ctx.globalAlpha = 1;
406
+ }
407
+
408
+ // Fill the area between the flow line and the zero line, clipped to a rectangle
409
+ // so only the above-zero (green) or below-zero (red) part shows.
410
+ function fillFlow(arr, X, Yf, zeroY, color, cx, cy, cw, ch) {
411
+ const len = arr.length; if (len < 2) return;
412
+ ctx.save(); ctx.beginPath(); ctx.rect(cx, cy, cw, ch); ctx.clip();
413
+ ctx.fillStyle = color; ctx.globalAlpha = 0.55; ctx.beginPath();
414
+ ctx.moveTo(X(0), zeroY);
415
+ for (let i = 0; i < len; i++) ctx.lineTo(X(i), Yf(Number.isFinite(arr[i]) ? arr[i] : 0));
416
+ ctx.lineTo(X(len - 1), zeroY); ctx.closePath(); ctx.fill();
417
+ ctx.globalAlpha = 1; ctx.restore();
418
+ }
419
+
420
+ // ---------------------------------------------------------------------------
421
+ document.getElementById("source").addEventListener("change", (e) => switchFeed(e.target.value));
422
+ document.getElementById("signal").addEventListener("change", (e) => { signalName = e.target.value; dirty = true; });
423
+ document.getElementById("window").addEventListener("change", (e) => {
424
+ const [t, n] = e.target.value.split(":");
425
+ const next = t === "vol" ? { mode: "volume", factor: +n, N: 240 } : { mode: "count", factor: 0, N: +n };
426
+ const sameMode = next.mode === clock.mode && next.factor === clock.factor;
427
+ clock = { mode: next.mode, factor: next.factor }; N = next.N;
428
+ if (sameMode) {
429
+ while (prices.length > N) { prices.shift(); lowlag.shift(); fair.shift(); flow.shift(); vpin.shift(); }
430
+ dirty = true;
431
+ } else reset(); // clock type changed: the samples mean something different, start clean
432
+ });
433
+ document.getElementById("pause").addEventListener("click", (e) => { paused = !paused; e.target.textContent = paused ? "Resume" : "Pause"; });
434
+ document.getElementById("reset").addEventListener("click", reset);
435
+
436
+ resize();
437
+ connect();
438
+ requestAnimationFrame(render);
439
+ </script>
440
+ </body>
441
+ </html>
@@ -10,6 +10,7 @@
10
10
  "license": "MIT",
11
11
  "devDependencies": {
12
12
  "@types/node": "^20.0.0",
13
+ "esbuild": "^0.28.1",
13
14
  "tsx": "^4.0.0",
14
15
  "typedoc": "^0.28.20",
15
16
  "typescript": "^5.5.0"