oakscriptjs 0.8.1 → 0.9.0

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 (544) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -9
  3. package/dist/cjs/array/index.d.ts +701 -0
  4. package/dist/cjs/array/index.d.ts.map +1 -0
  5. package/dist/cjs/array/index.js +392 -0
  6. package/dist/cjs/array/index.js.map +7 -0
  7. package/dist/cjs/box/index.d.ts +444 -0
  8. package/dist/cjs/box/index.d.ts.map +1 -0
  9. package/dist/cjs/box/index.js +246 -0
  10. package/dist/cjs/box/index.js.map +7 -0
  11. package/dist/cjs/callsite/index.d.ts +61 -0
  12. package/dist/cjs/callsite/index.d.ts.map +1 -0
  13. package/dist/cjs/callsite/index.js +65 -0
  14. package/dist/cjs/callsite/index.js.map +7 -0
  15. package/dist/cjs/chartpoint/index.d.ts +90 -0
  16. package/dist/cjs/chartpoint/index.d.ts.map +1 -0
  17. package/dist/cjs/chartpoint/index.js +56 -0
  18. package/dist/cjs/chartpoint/index.js.map +7 -0
  19. package/dist/cjs/color/index.d.ts +285 -0
  20. package/dist/cjs/color/index.d.ts.map +1 -0
  21. package/dist/cjs/color/index.js +143 -0
  22. package/dist/cjs/color/index.js.map +7 -0
  23. package/dist/cjs/compare/index.d.ts +26 -0
  24. package/dist/cjs/compare/index.d.ts.map +1 -0
  25. package/dist/cjs/compare/index.js +50 -0
  26. package/dist/cjs/compare/index.js.map +7 -0
  27. package/dist/cjs/drawing/registry.d.ts +42 -0
  28. package/dist/cjs/drawing/registry.d.ts.map +1 -0
  29. package/dist/cjs/drawing/registry.js +87 -0
  30. package/dist/cjs/drawing/registry.js.map +7 -0
  31. package/dist/cjs/index.d.ts +85 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +184 -0
  34. package/dist/cjs/index.js.map +7 -0
  35. package/dist/cjs/indicator.d.ts +117 -0
  36. package/dist/cjs/indicator.d.ts.map +1 -0
  37. package/dist/cjs/indicator.js +74 -0
  38. package/dist/cjs/indicator.js.map +7 -0
  39. package/dist/cjs/input.d.ts +196 -0
  40. package/dist/cjs/input.d.ts.map +1 -0
  41. package/dist/cjs/input.js +197 -0
  42. package/dist/cjs/input.js.map +7 -0
  43. package/dist/cjs/label/index.d.ts +303 -0
  44. package/dist/cjs/label/index.d.ts.map +1 -0
  45. package/dist/cjs/label/index.js +190 -0
  46. package/dist/cjs/label/index.js.map +7 -0
  47. package/dist/cjs/lib/index.d.ts +8 -0
  48. package/dist/cjs/lib/index.d.ts.map +1 -0
  49. package/dist/cjs/lib/index.js +19 -0
  50. package/dist/cjs/lib/index.js.map +7 -0
  51. package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
  52. package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
  53. package/dist/cjs/lib/zigzag/index.js +27 -0
  54. package/dist/cjs/lib/zigzag/index.js.map +7 -0
  55. package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
  56. package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
  57. package/dist/cjs/lib/zigzag/zigzag.js +207 -0
  58. package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
  59. package/dist/cjs/line/index.d.ts +342 -0
  60. package/dist/cjs/line/index.d.ts.map +1 -0
  61. package/dist/cjs/line/index.js +193 -0
  62. package/dist/cjs/line/index.js.map +7 -0
  63. package/dist/cjs/linefill/index.d.ts +124 -0
  64. package/dist/cjs/linefill/index.d.ts.map +1 -0
  65. package/dist/cjs/linefill/index.js +56 -0
  66. package/dist/cjs/linefill/index.js.map +7 -0
  67. package/dist/cjs/map/index.d.ts +69 -0
  68. package/dist/cjs/map/index.d.ts.map +1 -0
  69. package/dist/cjs/map/index.js +80 -0
  70. package/dist/cjs/map/index.js.map +7 -0
  71. package/dist/cjs/math/index.d.ts +560 -0
  72. package/dist/cjs/math/index.d.ts.map +1 -0
  73. package/dist/cjs/math/index.js +441 -0
  74. package/dist/cjs/math/index.js.map +7 -0
  75. package/dist/cjs/matrix/index.d.ts +1231 -0
  76. package/dist/cjs/matrix/index.d.ts.map +1 -0
  77. package/dist/cjs/matrix/index.js +1200 -0
  78. package/dist/cjs/matrix/index.js.map +7 -0
  79. package/dist/cjs/package.json +1 -0
  80. package/dist/cjs/plot.d.ts +76 -0
  81. package/dist/cjs/plot.d.ts.map +1 -0
  82. package/dist/cjs/plot.js +51 -0
  83. package/dist/cjs/plot.js.map +7 -0
  84. package/dist/cjs/polyline/index.d.ts +115 -0
  85. package/dist/cjs/polyline/index.d.ts.map +1 -0
  86. package/dist/cjs/polyline/index.js +76 -0
  87. package/dist/cjs/polyline/index.js.map +7 -0
  88. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  89. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  90. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
  91. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
  92. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  93. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  94. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
  95. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
  96. package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
  97. package/dist/cjs/runtime/index.d.ts.map +1 -0
  98. package/dist/cjs/runtime/index.js +49 -0
  99. package/dist/cjs/runtime/index.js.map +7 -0
  100. package/dist/cjs/runtime/inputs.d.ts +91 -0
  101. package/dist/cjs/runtime/inputs.d.ts.map +1 -0
  102. package/dist/cjs/runtime/inputs.js +262 -0
  103. package/dist/cjs/runtime/inputs.js.map +7 -0
  104. package/dist/cjs/runtime/runtime.d.ts +70 -0
  105. package/dist/cjs/runtime/runtime.d.ts.map +1 -0
  106. package/dist/cjs/runtime/runtime.js +148 -0
  107. package/dist/cjs/runtime/runtime.js.map +7 -0
  108. package/dist/cjs/runtime/series.d.ts +362 -0
  109. package/dist/cjs/runtime/series.d.ts.map +1 -0
  110. package/dist/cjs/runtime/series.js +560 -0
  111. package/dist/cjs/runtime/series.js.map +7 -0
  112. package/dist/cjs/runtime/types.d.ts +282 -0
  113. package/dist/cjs/runtime/types.d.ts.map +1 -0
  114. package/dist/cjs/runtime/types.js +17 -0
  115. package/dist/cjs/runtime/types.js.map +7 -0
  116. package/dist/cjs/script/index.d.ts +987 -0
  117. package/dist/cjs/script/index.d.ts.map +1 -0
  118. package/dist/cjs/script/index.js +1169 -0
  119. package/dist/cjs/script/index.js.map +7 -0
  120. package/dist/cjs/security/resample.d.ts +63 -0
  121. package/dist/cjs/security/resample.d.ts.map +1 -0
  122. package/dist/cjs/security/resample.js +84 -0
  123. package/dist/cjs/security/resample.js.map +7 -0
  124. package/dist/cjs/session/bars.d.ts +80 -0
  125. package/dist/cjs/session/bars.d.ts.map +1 -0
  126. package/dist/cjs/session/bars.js +219 -0
  127. package/dist/cjs/session/bars.js.map +7 -0
  128. package/dist/cjs/session/calendar.d.ts +70 -0
  129. package/dist/cjs/session/calendar.d.ts.map +1 -0
  130. package/dist/cjs/session/calendar.js +164 -0
  131. package/dist/cjs/session/calendar.js.map +7 -0
  132. package/dist/cjs/str/dateformat.d.ts +15 -0
  133. package/dist/cjs/str/dateformat.d.ts.map +1 -0
  134. package/dist/cjs/str/dateformat.js +149 -0
  135. package/dist/cjs/str/dateformat.js.map +7 -0
  136. package/dist/cjs/str/index.d.ts +459 -0
  137. package/dist/cjs/str/index.d.ts.map +1 -0
  138. package/dist/cjs/str/index.js +143 -0
  139. package/dist/cjs/str/index.js.map +7 -0
  140. package/dist/cjs/str/messageformat.d.ts +14 -0
  141. package/dist/cjs/str/messageformat.d.ts.map +1 -0
  142. package/dist/cjs/str/messageformat.js +114 -0
  143. package/dist/cjs/str/messageformat.js.map +7 -0
  144. package/dist/cjs/str/numberformat.d.ts +19 -0
  145. package/dist/cjs/str/numberformat.d.ts.map +1 -0
  146. package/dist/cjs/str/numberformat.js +170 -0
  147. package/dist/cjs/str/numberformat.js.map +7 -0
  148. package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
  149. package/dist/cjs/strategy/index.d.ts.map +1 -0
  150. package/dist/cjs/strategy/index.js +92 -0
  151. package/dist/cjs/strategy/index.js.map +7 -0
  152. package/dist/cjs/ta/index.d.ts +1397 -0
  153. package/dist/cjs/ta/index.d.ts.map +1 -0
  154. package/dist/cjs/ta/index.js +1715 -0
  155. package/dist/cjs/ta/index.js.map +7 -0
  156. package/dist/cjs/ta/running-sum.d.ts +30 -0
  157. package/dist/cjs/ta/running-sum.d.ts.map +1 -0
  158. package/dist/cjs/ta/running-sum.js +99 -0
  159. package/dist/cjs/ta/running-sum.js.map +7 -0
  160. package/dist/cjs/ta-series.d.ts +558 -0
  161. package/dist/cjs/ta-series.d.ts.map +1 -0
  162. package/dist/cjs/ta-series.js +606 -0
  163. package/dist/cjs/ta-series.js.map +7 -0
  164. package/dist/cjs/text/index.d.ts +14 -0
  165. package/dist/cjs/text/index.d.ts.map +1 -0
  166. package/dist/cjs/text/index.js +29 -0
  167. package/dist/cjs/text/index.js.map +7 -0
  168. package/dist/cjs/time/datestring.d.ts +23 -0
  169. package/dist/cjs/time/datestring.d.ts.map +1 -0
  170. package/dist/cjs/time/datestring.js +106 -0
  171. package/dist/cjs/time/datestring.js.map +7 -0
  172. package/dist/cjs/time/index.d.ts +89 -0
  173. package/dist/cjs/time/index.d.ts.map +1 -0
  174. package/dist/cjs/time/index.js +85 -0
  175. package/dist/cjs/time/index.js.map +7 -0
  176. package/dist/cjs/time/session.d.ts +17 -0
  177. package/dist/cjs/time/session.d.ts.map +1 -0
  178. package/dist/cjs/time/session.js +65 -0
  179. package/dist/cjs/time/session.js.map +7 -0
  180. package/dist/cjs/time/timezone.d.ts +40 -0
  181. package/dist/cjs/time/timezone.d.ts.map +1 -0
  182. package/dist/cjs/time/timezone.js +125 -0
  183. package/dist/cjs/time/timezone.js.map +7 -0
  184. package/dist/cjs/timeframe/index.d.ts +73 -0
  185. package/dist/cjs/timeframe/index.d.ts.map +1 -0
  186. package/dist/cjs/timeframe/index.js +85 -0
  187. package/dist/cjs/timeframe/index.js.map +7 -0
  188. package/dist/cjs/types/index.d.ts +343 -0
  189. package/dist/cjs/types/index.d.ts.map +1 -0
  190. package/dist/cjs/types/index.js +32 -0
  191. package/dist/cjs/types/index.js.map +7 -0
  192. package/dist/cjs/types/metadata.d.ts +300 -0
  193. package/dist/cjs/types/metadata.d.ts.map +1 -0
  194. package/dist/cjs/types/metadata.js +17 -0
  195. package/dist/cjs/types/metadata.js.map +7 -0
  196. package/dist/cjs/utils/index.d.ts +167 -0
  197. package/dist/cjs/utils/index.d.ts.map +1 -0
  198. package/dist/cjs/utils/index.js +209 -0
  199. package/dist/cjs/utils/index.js.map +7 -0
  200. package/dist/esm/array/index.d.ts +701 -0
  201. package/dist/esm/array/index.d.ts.map +1 -0
  202. package/dist/esm/array/index.js +983 -0
  203. package/dist/esm/array/index.js.map +1 -0
  204. package/dist/esm/box/index.d.ts +444 -0
  205. package/dist/esm/box/index.d.ts.map +1 -0
  206. package/dist/esm/box/index.js +602 -0
  207. package/dist/esm/box/index.js.map +1 -0
  208. package/dist/esm/callsite/index.d.ts +61 -0
  209. package/dist/esm/callsite/index.d.ts.map +1 -0
  210. package/dist/esm/callsite/index.js +97 -0
  211. package/dist/esm/callsite/index.js.map +1 -0
  212. package/dist/esm/chartpoint/index.d.ts +90 -0
  213. package/dist/esm/chartpoint/index.d.ts.map +1 -0
  214. package/dist/esm/chartpoint/index.js +113 -0
  215. package/dist/esm/chartpoint/index.js.map +1 -0
  216. package/dist/esm/color/index.d.ts +285 -0
  217. package/dist/esm/color/index.d.ts.map +1 -0
  218. package/dist/esm/color/index.js +373 -0
  219. package/dist/esm/color/index.js.map +1 -0
  220. package/dist/esm/compare/index.d.ts +26 -0
  221. package/dist/esm/compare/index.d.ts.map +1 -0
  222. package/dist/esm/compare/index.js +39 -0
  223. package/dist/esm/compare/index.js.map +1 -0
  224. package/dist/esm/drawing/registry.d.ts +42 -0
  225. package/dist/esm/drawing/registry.d.ts.map +1 -0
  226. package/dist/esm/drawing/registry.js +89 -0
  227. package/dist/esm/drawing/registry.js.map +1 -0
  228. package/dist/esm/index.d.ts +85 -0
  229. package/dist/esm/index.d.ts.map +1 -0
  230. package/dist/esm/index.js +96 -0
  231. package/dist/esm/index.js.map +1 -0
  232. package/dist/esm/indicator.d.ts +117 -0
  233. package/dist/esm/indicator.d.ts.map +1 -0
  234. package/dist/esm/indicator.js +84 -0
  235. package/dist/esm/indicator.js.map +1 -0
  236. package/dist/esm/input.d.ts +196 -0
  237. package/dist/esm/input.d.ts.map +1 -0
  238. package/dist/esm/input.js +183 -0
  239. package/dist/esm/input.js.map +1 -0
  240. package/dist/esm/label/index.d.ts +303 -0
  241. package/dist/esm/label/index.d.ts.map +1 -0
  242. package/dist/esm/label/index.js +417 -0
  243. package/dist/esm/label/index.js.map +1 -0
  244. package/dist/esm/lib/index.d.ts +8 -0
  245. package/dist/esm/lib/index.d.ts.map +1 -0
  246. package/dist/esm/lib/index.js +8 -0
  247. package/dist/esm/lib/index.js.map +1 -0
  248. package/dist/esm/lib/zigzag/index.d.ts +5 -0
  249. package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
  250. package/dist/esm/lib/zigzag/index.js +5 -0
  251. package/dist/esm/lib/zigzag/index.js.map +1 -0
  252. package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
  253. package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
  254. package/dist/esm/lib/zigzag/zigzag.js +229 -0
  255. package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
  256. package/dist/esm/line/index.d.ts +342 -0
  257. package/dist/esm/line/index.d.ts.map +1 -0
  258. package/dist/esm/line/index.js +470 -0
  259. package/dist/esm/line/index.js.map +1 -0
  260. package/dist/esm/linefill/index.d.ts +124 -0
  261. package/dist/esm/linefill/index.d.ts.map +1 -0
  262. package/dist/esm/linefill/index.js +144 -0
  263. package/dist/esm/linefill/index.js.map +1 -0
  264. package/dist/esm/map/index.d.ts +69 -0
  265. package/dist/esm/map/index.d.ts.map +1 -0
  266. package/dist/esm/map/index.js +106 -0
  267. package/dist/esm/map/index.js.map +1 -0
  268. package/dist/esm/math/index.d.ts +560 -0
  269. package/dist/esm/math/index.d.ts.map +1 -0
  270. package/dist/esm/math/index.js +495 -0
  271. package/dist/esm/math/index.js.map +1 -0
  272. package/dist/esm/matrix/index.d.ts +1231 -0
  273. package/dist/esm/matrix/index.d.ts.map +1 -0
  274. package/dist/esm/matrix/index.js +2450 -0
  275. package/dist/esm/matrix/index.js.map +1 -0
  276. package/dist/esm/plot.d.ts +76 -0
  277. package/dist/esm/plot.d.ts.map +1 -0
  278. package/dist/esm/plot.js +63 -0
  279. package/dist/esm/plot.js.map +1 -0
  280. package/dist/esm/polyline/index.d.ts +115 -0
  281. package/dist/esm/polyline/index.d.ts.map +1 -0
  282. package/dist/esm/polyline/index.js +157 -0
  283. package/dist/esm/polyline/index.js.map +1 -0
  284. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  285. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  286. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
  287. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
  288. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  289. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  290. package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
  291. package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
  292. package/dist/esm/runtime/index.d.ts +13 -0
  293. package/dist/esm/runtime/index.d.ts.map +1 -0
  294. package/dist/esm/runtime/index.js +14 -0
  295. package/dist/esm/runtime/index.js.map +1 -0
  296. package/dist/esm/runtime/inputs.d.ts +91 -0
  297. package/dist/esm/runtime/inputs.d.ts.map +1 -0
  298. package/dist/esm/runtime/inputs.js +334 -0
  299. package/dist/esm/runtime/inputs.js.map +1 -0
  300. package/dist/esm/runtime/runtime.d.ts +70 -0
  301. package/dist/esm/runtime/runtime.d.ts.map +1 -0
  302. package/dist/esm/runtime/runtime.js +193 -0
  303. package/dist/esm/runtime/runtime.js.map +1 -0
  304. package/dist/esm/runtime/series.d.ts +362 -0
  305. package/dist/esm/runtime/series.d.ts.map +1 -0
  306. package/dist/esm/runtime/series.js +583 -0
  307. package/dist/esm/runtime/series.js.map +1 -0
  308. package/dist/esm/runtime/types.d.ts +282 -0
  309. package/dist/esm/runtime/types.d.ts.map +1 -0
  310. package/dist/esm/runtime/types.js +7 -0
  311. package/dist/esm/runtime/types.js.map +1 -0
  312. package/dist/esm/script/index.d.ts +987 -0
  313. package/dist/esm/script/index.d.ts.map +1 -0
  314. package/dist/esm/script/index.js +1289 -0
  315. package/dist/esm/script/index.js.map +1 -0
  316. package/dist/esm/security/resample.d.ts +63 -0
  317. package/dist/esm/security/resample.d.ts.map +1 -0
  318. package/dist/esm/security/resample.js +110 -0
  319. package/dist/esm/security/resample.js.map +1 -0
  320. package/dist/esm/session/bars.d.ts +80 -0
  321. package/dist/esm/session/bars.d.ts.map +1 -0
  322. package/dist/esm/session/bars.js +232 -0
  323. package/dist/esm/session/bars.js.map +1 -0
  324. package/dist/esm/session/calendar.d.ts +70 -0
  325. package/dist/esm/session/calendar.d.ts.map +1 -0
  326. package/dist/esm/session/calendar.js +172 -0
  327. package/dist/esm/session/calendar.js.map +1 -0
  328. package/dist/esm/str/dateformat.d.ts +15 -0
  329. package/dist/esm/str/dateformat.d.ts.map +1 -0
  330. package/dist/esm/str/dateformat.js +136 -0
  331. package/dist/esm/str/dateformat.js.map +1 -0
  332. package/dist/esm/str/index.d.ts +459 -0
  333. package/dist/esm/str/index.d.ts.map +1 -0
  334. package/dist/esm/str/index.js +540 -0
  335. package/dist/esm/str/index.js.map +1 -0
  336. package/dist/esm/str/messageformat.d.ts +14 -0
  337. package/dist/esm/str/messageformat.d.ts.map +1 -0
  338. package/dist/esm/str/messageformat.js +111 -0
  339. package/dist/esm/str/messageformat.js.map +1 -0
  340. package/dist/esm/str/numberformat.d.ts +19 -0
  341. package/dist/esm/str/numberformat.d.ts.map +1 -0
  342. package/dist/esm/str/numberformat.js +189 -0
  343. package/dist/esm/str/numberformat.js.map +1 -0
  344. package/dist/esm/strategy/index.d.ts +245 -0
  345. package/dist/esm/strategy/index.d.ts.map +1 -0
  346. package/dist/esm/strategy/index.js +84 -0
  347. package/dist/esm/strategy/index.js.map +1 -0
  348. package/dist/esm/ta/index.d.ts +1397 -0
  349. package/dist/esm/ta/index.d.ts.map +1 -0
  350. package/dist/esm/ta/index.js +3227 -0
  351. package/dist/esm/ta/index.js.map +1 -0
  352. package/dist/esm/ta/running-sum.d.ts +30 -0
  353. package/dist/esm/ta/running-sum.d.ts.map +1 -0
  354. package/dist/esm/ta/running-sum.js +113 -0
  355. package/dist/esm/ta/running-sum.js.map +1 -0
  356. package/dist/esm/ta-series.d.ts +558 -0
  357. package/dist/esm/ta-series.d.ts.map +1 -0
  358. package/dist/esm/ta-series.js +910 -0
  359. package/dist/esm/ta-series.js.map +1 -0
  360. package/dist/esm/text/index.d.ts +14 -0
  361. package/dist/esm/text/index.d.ts.map +1 -0
  362. package/dist/esm/text/index.js +14 -0
  363. package/dist/esm/text/index.js.map +1 -0
  364. package/dist/esm/time/datestring.d.ts +23 -0
  365. package/dist/esm/time/datestring.d.ts.map +1 -0
  366. package/dist/esm/time/datestring.js +94 -0
  367. package/dist/esm/time/datestring.js.map +1 -0
  368. package/dist/esm/time/index.d.ts +89 -0
  369. package/dist/esm/time/index.d.ts.map +1 -0
  370. package/dist/esm/time/index.js +108 -0
  371. package/dist/esm/time/index.js.map +1 -0
  372. package/dist/esm/time/session.d.ts +17 -0
  373. package/dist/esm/time/session.d.ts.map +1 -0
  374. package/dist/esm/time/session.js +69 -0
  375. package/dist/esm/time/session.js.map +1 -0
  376. package/dist/esm/time/timezone.d.ts +40 -0
  377. package/dist/esm/time/timezone.d.ts.map +1 -0
  378. package/dist/esm/time/timezone.js +144 -0
  379. package/dist/esm/time/timezone.js.map +1 -0
  380. package/dist/esm/timeframe/index.d.ts +73 -0
  381. package/dist/esm/timeframe/index.d.ts.map +1 -0
  382. package/dist/esm/timeframe/index.js +131 -0
  383. package/dist/esm/timeframe/index.js.map +1 -0
  384. package/dist/esm/types/index.d.ts +343 -0
  385. package/dist/esm/types/index.d.ts.map +1 -0
  386. package/dist/esm/types/index.js +17 -0
  387. package/dist/esm/types/index.js.map +1 -0
  388. package/dist/esm/types/metadata.d.ts +300 -0
  389. package/dist/esm/types/metadata.d.ts.map +1 -0
  390. package/dist/esm/types/metadata.js +7 -0
  391. package/dist/esm/types/metadata.js.map +1 -0
  392. package/dist/esm/utils/index.d.ts +167 -0
  393. package/dist/esm/utils/index.d.ts.map +1 -0
  394. package/dist/esm/utils/index.js +295 -0
  395. package/dist/esm/utils/index.js.map +1 -0
  396. package/package.json +53 -23
  397. package/src/array/index.ts +1056 -0
  398. package/src/box/index.ts +680 -0
  399. package/src/callsite/index.ts +104 -0
  400. package/src/chartpoint/index.ts +126 -0
  401. package/src/color/index.ts +411 -0
  402. package/src/compare/index.ts +46 -0
  403. package/src/drawing/registry.ts +106 -0
  404. package/src/index.ts +201 -0
  405. package/src/indicator.ts +185 -0
  406. package/src/input.ts +280 -0
  407. package/src/label/index.ts +490 -0
  408. package/src/lib/index.ts +8 -0
  409. package/src/lib/zigzag/index.ts +13 -0
  410. package/src/lib/zigzag/zigzag.ts +318 -0
  411. package/src/line/index.ts +530 -0
  412. package/src/linefill/index.ts +152 -0
  413. package/src/map/index.ts +115 -0
  414. package/src/math/index.ts +1071 -0
  415. package/src/matrix/index.ts +2697 -0
  416. package/src/plot.ts +121 -0
  417. package/src/polyline/index.ts +184 -0
  418. package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
  419. package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
  420. package/src/runtime/index.ts +52 -0
  421. package/src/runtime/inputs.ts +377 -0
  422. package/src/runtime/runtime.ts +241 -0
  423. package/src/runtime/series.ts +644 -0
  424. package/src/runtime/types.ts +292 -0
  425. package/src/script/index.ts +1865 -0
  426. package/src/security/resample.ts +119 -0
  427. package/src/session/bars.ts +262 -0
  428. package/src/session/calendar.ts +199 -0
  429. package/src/str/dateformat.ts +104 -0
  430. package/src/str/index.ts +557 -0
  431. package/src/str/messageformat.ts +109 -0
  432. package/src/str/numberformat.ts +197 -0
  433. package/src/strategy/index.ts +281 -0
  434. package/src/ta/index.ts +3580 -0
  435. package/src/ta/running-sum.ts +117 -0
  436. package/src/ta-series.ts +1036 -0
  437. package/src/text/index.ts +14 -0
  438. package/src/time/datestring.ts +96 -0
  439. package/src/time/index.ts +161 -0
  440. package/src/time/session.ts +79 -0
  441. package/src/time/timezone.ts +180 -0
  442. package/src/timeframe/index.ts +144 -0
  443. package/src/types/index.ts +398 -0
  444. package/src/types/metadata.ts +334 -0
  445. package/src/utils/index.ts +334 -0
  446. package/dist/array/index.d.ts +0 -57
  447. package/dist/array/index.d.ts.map +0 -1
  448. package/dist/box/index.d.ts +0 -37
  449. package/dist/box/index.d.ts.map +0 -1
  450. package/dist/callsite/index.d.ts +0 -7
  451. package/dist/callsite/index.d.ts.map +0 -1
  452. package/dist/chartpoint/index.d.ts +0 -8
  453. package/dist/chartpoint/index.d.ts.map +0 -1
  454. package/dist/color/index.d.ts +0 -28
  455. package/dist/color/index.d.ts.map +0 -1
  456. package/dist/compare/index.d.ts +0 -8
  457. package/dist/compare/index.d.ts.map +0 -1
  458. package/dist/drawing/registry.d.ts +0 -19
  459. package/dist/drawing/registry.d.ts.map +0 -1
  460. package/dist/index.cjs +0 -7979
  461. package/dist/index.d.ts +0 -64
  462. package/dist/index.d.ts.map +0 -1
  463. package/dist/index.mjs +0 -7962
  464. package/dist/indicator.d.ts +0 -42
  465. package/dist/indicator.d.ts.map +0 -1
  466. package/dist/input.d.ts +0 -47
  467. package/dist/input.d.ts.map +0 -1
  468. package/dist/label/index.d.ts +0 -30
  469. package/dist/label/index.d.ts.map +0 -1
  470. package/dist/lib/index.d.ts +0 -2
  471. package/dist/lib/index.d.ts.map +0 -1
  472. package/dist/lib/zigzag/index.d.ts.map +0 -1
  473. package/dist/lib/zigzag/zigzag.d.ts +0 -47
  474. package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
  475. package/dist/line/index.d.ts +0 -30
  476. package/dist/line/index.d.ts.map +0 -1
  477. package/dist/linefill/index.d.ts +0 -10
  478. package/dist/linefill/index.d.ts.map +0 -1
  479. package/dist/map/index.d.ts +0 -14
  480. package/dist/map/index.d.ts.map +0 -1
  481. package/dist/math/index.d.ts +0 -53
  482. package/dist/math/index.d.ts.map +0 -1
  483. package/dist/matrix/index.d.ts +0 -52
  484. package/dist/matrix/index.d.ts.map +0 -1
  485. package/dist/plot.d.ts +0 -20
  486. package/dist/plot.d.ts.map +0 -1
  487. package/dist/polyline/index.d.ts +0 -11
  488. package/dist/polyline/index.d.ts.map +0 -1
  489. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
  490. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
  491. package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
  492. package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
  493. package/dist/runtime/index.cjs +0 -600
  494. package/dist/runtime/index.d.ts.map +0 -1
  495. package/dist/runtime/index.mjs +0 -577
  496. package/dist/runtime/inputs.d.ts +0 -13
  497. package/dist/runtime/inputs.d.ts.map +0 -1
  498. package/dist/runtime/runtime.d.ts +0 -16
  499. package/dist/runtime/runtime.d.ts.map +0 -1
  500. package/dist/runtime/series.d.ts +0 -60
  501. package/dist/runtime/series.d.ts.map +0 -1
  502. package/dist/runtime/types.d.ts +0 -122
  503. package/dist/runtime/types.d.ts.map +0 -1
  504. package/dist/script/index.cjs +0 -6372
  505. package/dist/script/index.d.ts +0 -709
  506. package/dist/script/index.d.ts.map +0 -1
  507. package/dist/script/index.mjs +0 -6355
  508. package/dist/security/resample.d.ts +0 -13
  509. package/dist/security/resample.d.ts.map +0 -1
  510. package/dist/session/bars.d.ts +0 -34
  511. package/dist/session/bars.d.ts.map +0 -1
  512. package/dist/session/calendar.d.ts +0 -31
  513. package/dist/session/calendar.d.ts.map +0 -1
  514. package/dist/str/dateformat.d.ts +0 -2
  515. package/dist/str/dateformat.d.ts.map +0 -1
  516. package/dist/str/index.d.ts +0 -24
  517. package/dist/str/index.d.ts.map +0 -1
  518. package/dist/str/messageformat.d.ts +0 -2
  519. package/dist/str/messageformat.d.ts.map +0 -1
  520. package/dist/str/numberformat.d.ts +0 -3
  521. package/dist/str/numberformat.d.ts.map +0 -1
  522. package/dist/strategy/index.d.ts.map +0 -1
  523. package/dist/ta/index.d.ts +0 -72
  524. package/dist/ta/index.d.ts.map +0 -1
  525. package/dist/ta-series.d.ts +0 -143
  526. package/dist/ta-series.d.ts.map +0 -1
  527. package/dist/text/index.d.ts +0 -4
  528. package/dist/text/index.d.ts.map +0 -1
  529. package/dist/time/datestring.d.ts +0 -2
  530. package/dist/time/datestring.d.ts.map +0 -1
  531. package/dist/time/index.d.ts +0 -15
  532. package/dist/time/index.d.ts.map +0 -1
  533. package/dist/time/session.d.ts +0 -2
  534. package/dist/time/session.d.ts.map +0 -1
  535. package/dist/time/timezone.d.ts +0 -13
  536. package/dist/time/timezone.d.ts.map +0 -1
  537. package/dist/timeframe/index.d.ts +0 -17
  538. package/dist/timeframe/index.d.ts.map +0 -1
  539. package/dist/types/index.d.ts +0 -181
  540. package/dist/types/index.d.ts.map +0 -1
  541. package/dist/types/metadata.d.ts +0 -131
  542. package/dist/types/metadata.d.ts.map +0 -1
  543. package/dist/utils/index.d.ts +0 -26
  544. package/dist/utils/index.d.ts.map +0 -1
@@ -0,0 +1,1071 @@
1
+ /**
2
+ * Math namespace
3
+ * Mirrors PineScript's math.* functions for mathematical operations and calculations.
4
+ *
5
+ * @remarks
6
+ * All math functions in this namespace follow PineScript v6 API specifications.
7
+ * Functions include basic arithmetic, algebraic operations, trigonometry, and combinatorics.
8
+ *
9
+ * @version 6
10
+ */
11
+
12
+ import type { float, int, simple_int, series_float } from '../types/index.js';
13
+ import { Series } from '../runtime/series.js';
14
+ import { runningSum } from '../ta/running-sum.js';
15
+
16
+ /**
17
+ * Returns the absolute value of a number.
18
+ *
19
+ * @param value - The number or Series
20
+ * @returns The absolute value (always non-negative)
21
+ *
22
+ * @remarks
23
+ * - Returns the distance from zero on the number line
24
+ * - |x| = x if x ≥ 0, -x if x < 0
25
+ * - If value is a Series, returns a Series; if value is a number, returns a number
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * math.abs(5) // Returns: 5
30
+ * math.abs(-5) // Returns: 5
31
+ * math.abs(0) // Returns: 0
32
+ * ```
33
+ */
34
+ export function abs(value: Series): Series;
35
+ export function abs(value: float): float;
36
+ export function abs(value: float | Series): float | Series {
37
+ if (value instanceof Series) {
38
+ const bars = value.bars;
39
+ const valueArray = value.toArray();
40
+ const length = bars.length;
41
+
42
+ const result: number[] = [];
43
+ for (let i = 0; i < length; i++) {
44
+ const v = valueArray[i] ?? NaN;
45
+ result.push(Math.abs(v));
46
+ }
47
+
48
+ return Series.fromArray(bars, result);
49
+ }
50
+
51
+ return Math.abs(value);
52
+ }
53
+
54
+ /**
55
+ * Returns the smallest integer greater than or equal to a given number (rounds up).
56
+ *
57
+ * @param value - The number to round up or Series
58
+ * @returns The ceiling value (smallest integer ≥ value)
59
+ *
60
+ * @remarks
61
+ * - Always rounds towards positive infinity
62
+ * - For positive numbers, rounds away from zero
63
+ * - For negative numbers, rounds towards zero
64
+ * - If value is a Series, returns a Series; if value is a number, returns a number
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * math.ceil(4.2) // Returns: 5
69
+ * math.ceil(4.8) // Returns: 5
70
+ * math.ceil(-4.2) // Returns: -4
71
+ * math.ceil(5) // Returns: 5
72
+ * ```
73
+ */
74
+ export function ceil(value: Series): Series;
75
+ export function ceil(value: float): int;
76
+ export function ceil(value: float | Series): int | Series {
77
+ if (value instanceof Series) {
78
+ const bars = value.bars;
79
+ const valueArray = value.toArray();
80
+ const length = bars.length;
81
+
82
+ const result: number[] = [];
83
+ for (let i = 0; i < length; i++) {
84
+ const v = valueArray[i] ?? NaN;
85
+ result.push(Math.ceil(v));
86
+ }
87
+
88
+ return Series.fromArray(bars, result);
89
+ }
90
+
91
+ return Math.ceil(value);
92
+ }
93
+
94
+ /**
95
+ * Returns the largest integer less than or equal to a given number (rounds down).
96
+ *
97
+ * @param value - The number to round down or Series
98
+ * @returns The floor value (largest integer ≤ value)
99
+ *
100
+ * @remarks
101
+ * - Always rounds towards negative infinity
102
+ * - For positive numbers, rounds towards zero
103
+ * - For negative numbers, rounds away from zero
104
+ * - If value is a Series, returns a Series; if value is a number, returns a number
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * math.floor(4.2) // Returns: 4
109
+ * math.floor(4.8) // Returns: 4
110
+ * math.floor(-4.2) // Returns: -5
111
+ * math.floor(5) // Returns: 5
112
+ * ```
113
+ */
114
+ export function floor(value: Series): Series;
115
+ export function floor(value: float): int;
116
+ export function floor(value: float | Series): int | Series {
117
+ if (value instanceof Series) {
118
+ const bars = value.bars;
119
+ const valueArray = value.toArray();
120
+ const length = bars.length;
121
+
122
+ const result: number[] = [];
123
+ for (let i = 0; i < length; i++) {
124
+ const v = valueArray[i] ?? NaN;
125
+ result.push(Math.floor(v));
126
+ }
127
+
128
+ return Series.fromArray(bars, result);
129
+ }
130
+
131
+ return Math.floor(value);
132
+ }
133
+
134
+ /**
135
+ * Returns the value rounded to the nearest integer or to a specified precision.
136
+ *
137
+ * @param value - The number to round or Series
138
+ * @param precision - Optional number of decimal places (default: 0)
139
+ * @returns The rounded value
140
+ *
141
+ * @remarks
142
+ * - Rounds to nearest integer by default
143
+ * - With precision, rounds to that many decimal places
144
+ * - Uses "round half up" strategy (0.5 rounds to 1)
145
+ * - If value is a Series, returns a Series; if value is a number, returns a number
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * math.round(4.2) // Returns: 4
150
+ * math.round(4.5) // Returns: 5
151
+ * math.round(4.8) // Returns: 5
152
+ * math.round(4.567, 2) // Returns: 4.57
153
+ * math.round(4.567, 1) // Returns: 4.6
154
+ * ```
155
+ */
156
+ export function round(value: Series, precision?: int): Series;
157
+ export function round(value: float, precision?: int): float;
158
+ export function round(value: float | Series, precision?: int): float | Series {
159
+ if (value instanceof Series) {
160
+ const bars = value.bars;
161
+ const valueArray = value.toArray();
162
+ const length = bars.length;
163
+
164
+ const result: number[] = [];
165
+ if (precision === undefined) {
166
+ for (let i = 0; i < length; i++) {
167
+ const v = valueArray[i] ?? NaN;
168
+ result.push(Math.round(v));
169
+ }
170
+ } else {
171
+ const multiplier = Math.pow(10, precision);
172
+ for (let i = 0; i < length; i++) {
173
+ const v = valueArray[i] ?? NaN;
174
+ result.push(Math.round(v * multiplier) / multiplier);
175
+ }
176
+ }
177
+
178
+ return Series.fromArray(bars, result);
179
+ }
180
+
181
+ if (precision === undefined) {
182
+ return Math.round(value);
183
+ }
184
+ const multiplier = Math.pow(10, precision);
185
+ return Math.round(value * multiplier) / multiplier;
186
+ }
187
+
188
+ /**
189
+ * Returns the maximum value from the arguments.
190
+ *
191
+ * @param values - Variable number of values to compare (numbers or Series)
192
+ * @returns The largest value
193
+ *
194
+ * @remarks
195
+ * - Accepts any number of arguments
196
+ * - Returns -Infinity if no arguments provided
197
+ * - Returns NaN if any argument is NaN
198
+ * - If any argument is a Series, returns a Series; otherwise returns a number
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * math.max(1, 2, 3) // Returns: 3
203
+ * math.max(-1, -5, -2) // Returns: -1
204
+ * math.max(10) // Returns: 10
205
+ * math.max(5, 10, 3, 8) // Returns: 10
206
+ * ```
207
+ */
208
+ export function max(...values: (float | Series)[]): float | Series {
209
+ // Check if any value is a Series
210
+ const hasSeries = values.some(v => v instanceof Series);
211
+
212
+ if (!hasSeries) {
213
+ // All scalars - use native Math.max
214
+ return Math.max(...(values as number[]));
215
+ }
216
+
217
+ // At least one Series - return a Series
218
+ const firstSeries = values.find(v => v instanceof Series) as Series;
219
+ const bars = firstSeries.bars;
220
+ const length = bars.length;
221
+
222
+ // Convert all values to arrays (scalars become constant arrays)
223
+ const valueArrays = values.map(v =>
224
+ v instanceof Series ? v.toArray() : null
225
+ );
226
+
227
+ const result: number[] = [];
228
+ for (let i = 0; i < length; i++) {
229
+ const nums = values.map((v, idx) =>
230
+ valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
231
+ );
232
+ result.push(Math.max(...nums));
233
+ }
234
+
235
+ return Series.fromArray(bars, result);
236
+ }
237
+
238
+ /**
239
+ * Returns the minimum value from the arguments.
240
+ *
241
+ * @param values - Variable number of values to compare (numbers or Series)
242
+ * @returns The smallest value
243
+ *
244
+ * @remarks
245
+ * - Accepts any number of arguments
246
+ * - Returns Infinity if no arguments provided
247
+ * - Returns NaN if any argument is NaN
248
+ * - If any argument is a Series, returns a Series; otherwise returns a number
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * math.min(1, 2, 3) // Returns: 1
253
+ * math.min(-1, -5, -2) // Returns: -5
254
+ * math.min(10) // Returns: 10
255
+ * math.min(5, 10, 3, 8) // Returns: 3
256
+ * ```
257
+ */
258
+ export function min(...values: (float | Series)[]): float | Series {
259
+ // Check if any value is a Series
260
+ const hasSeries = values.some(v => v instanceof Series);
261
+
262
+ if (!hasSeries) {
263
+ // All scalars - use native Math.min
264
+ return Math.min(...(values as number[]));
265
+ }
266
+
267
+ // At least one Series - return a Series
268
+ const firstSeries = values.find(v => v instanceof Series) as Series;
269
+ const bars = firstSeries.bars;
270
+ const length = bars.length;
271
+
272
+ // Convert all values to arrays (scalars become constant arrays)
273
+ const valueArrays = values.map(v =>
274
+ v instanceof Series ? v.toArray() : null
275
+ );
276
+
277
+ const result: number[] = [];
278
+ for (let i = 0; i < length; i++) {
279
+ const nums = values.map((v, idx) =>
280
+ valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
281
+ );
282
+ result.push(Math.min(...nums));
283
+ }
284
+
285
+ return Series.fromArray(bars, result);
286
+ }
287
+
288
+ /**
289
+ * Returns the average (arithmetic mean) of the arguments.
290
+ *
291
+ * @param values - Variable number of values (numbers or Series)
292
+ * @returns The arithmetic mean
293
+ *
294
+ * @remarks
295
+ * - Calculates sum of all values divided by count
296
+ * - Returns NaN if no arguments provided (division by zero)
297
+ * - If any argument is a Series, returns a Series; otherwise returns a number
298
+ *
299
+ * @example
300
+ * ```typescript
301
+ * math.avg(1, 2, 3) // Returns: 2
302
+ * math.avg(10, 20) // Returns: 15
303
+ * math.avg(5) // Returns: 5
304
+ * math.avg(1, 2, 3, 4, 5) // Returns: 3
305
+ * ```
306
+ */
307
+ export function avg(...values: (float | Series)[]): float | Series {
308
+ // Check if any value is a Series
309
+ const hasSeries = values.some(v => v instanceof Series);
310
+
311
+ if (!hasSeries) {
312
+ // All scalars - calculate simple average
313
+ return (values as number[]).reduce((a, b) => a + b, 0) / values.length;
314
+ }
315
+
316
+ // At least one Series - return a Series
317
+ const firstSeries = values.find(v => v instanceof Series) as Series;
318
+ const bars = firstSeries.bars;
319
+ const length = bars.length;
320
+
321
+ // Convert all values to arrays (scalars become constant arrays)
322
+ const valueArrays = values.map(v =>
323
+ v instanceof Series ? v.toArray() : null
324
+ );
325
+
326
+ const result: number[] = [];
327
+ for (let i = 0; i < length; i++) {
328
+ const nums = values.map((v, idx) =>
329
+ valueArrays[idx] ? valueArrays[idx]![i] ?? NaN : (v as number)
330
+ );
331
+ const sum = nums.reduce((a, b) => a + b, 0);
332
+ result.push(sum / nums.length);
333
+ }
334
+
335
+ return Series.fromArray(bars, result);
336
+ }
337
+
338
+ /**
339
+ * Returns the sum of values over a sliding window.
340
+ *
341
+ * @param source - Series of values or array
342
+ * @param length - Window length for summation
343
+ * @returns Series or array with rolling sum values
344
+ *
345
+ * @remarks
346
+ * - Calculates the sum of the last `length` non-`na` values at each point; an `na` value (also +/-Infinity) is
347
+ * skipped and the bar keeps the previous result (as in PineScript)
348
+ * - Returns NaN until `length` non-`na` values are available
349
+ * - A compensated running sum, as in PineScript, so the result can differ from the exact window sum in the last
350
+ * bits (bit for bit with PineScript)
351
+ * - When passed a Series, returns a Series; when passed an array, returns an array
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * math.sum([1, 2, 3, 4, 5], 3) // Returns: [NaN, NaN, 6, 9, 12]
356
+ * // Explanation: [NaN, NaN, 1+2+3, 2+3+4, 3+4+5]
357
+ * ```
358
+ */
359
+ export function sum(source: Series, length: simple_int): Series;
360
+ export function sum(source: series_float, length: simple_int): series_float;
361
+ export function sum(source: series_float | Series, length: simple_int): series_float | Series {
362
+ // Handle Series objects - extract to array first
363
+ const sourceArray = source instanceof Series ? source.toArray() : source;
364
+ // PineScript: the sum of the last `length` non-na values (also +/-Infinity skipped); an na bar keeps the previous
365
+ // result. A compensated running sum, bit for bit as PineScript.
366
+ const result: series_float = runningSum(sourceArray, length);
367
+
368
+ // If input was a Series, return a Series
369
+ if (source instanceof Series) {
370
+ return Series.fromArray(source.bars, result);
371
+ }
372
+
373
+ return result;
374
+ }
375
+
376
+ /**
377
+ * Returns the square root of a number.
378
+ *
379
+ * @param value - The number (must be non-negative) or Series
380
+ * @returns The square root (√value)
381
+ *
382
+ * @remarks
383
+ * - Returns NaN for negative numbers
384
+ * - √x × √x = x (for non-negative x)
385
+ * - If value is a Series, returns a Series; if value is a number, returns a number
386
+ *
387
+ * @example
388
+ * ```typescript
389
+ * math.sqrt(9) // Returns: 3
390
+ * math.sqrt(16) // Returns: 4
391
+ * math.sqrt(2) // Returns: 1.414...
392
+ * math.sqrt(0) // Returns: 0
393
+ * ```
394
+ */
395
+ export function sqrt(value: Series): Series;
396
+ export function sqrt(value: float): float;
397
+ export function sqrt(value: float | Series): float | Series {
398
+ if (value instanceof Series) {
399
+ const bars = value.bars;
400
+ const valueArray = value.toArray();
401
+ const length = bars.length;
402
+
403
+ const result: number[] = [];
404
+ for (let i = 0; i < length; i++) {
405
+ const v = valueArray[i] ?? NaN;
406
+ result.push(Math.sqrt(v));
407
+ }
408
+
409
+ return Series.fromArray(bars, result);
410
+ }
411
+
412
+ return Math.sqrt(value);
413
+ }
414
+
415
+ /**
416
+ * Returns base raised to the power of exponent.
417
+ *
418
+ * @param base - The base number or Series
419
+ * @param exponent - The exponent (power) or Series
420
+ * @returns base^exponent
421
+ *
422
+ * @remarks
423
+ * - 0^0 returns 1
424
+ * - Negative base with fractional exponent returns NaN
425
+ * - Any number to the power of 0 equals 1
426
+ * - If any argument is a Series, returns a Series; if all are numbers, returns a number
427
+ *
428
+ * @example
429
+ * ```typescript
430
+ * math.pow(2, 3) // Returns: 8 (2³)
431
+ * math.pow(10, 2) // Returns: 100
432
+ * math.pow(5, 0) // Returns: 1
433
+ * math.pow(2, -1) // Returns: 0.5
434
+ * ```
435
+ */
436
+ export function pow(base: Series, exponent: float): Series;
437
+ export function pow(base: float, exponent: Series): Series;
438
+ export function pow(base: Series, exponent: Series): Series;
439
+ export function pow(base: float, exponent: float): float;
440
+ export function pow(base: float | Series, exponent: float | Series): float | Series {
441
+ const baseIsSeries = base instanceof Series;
442
+ const expIsSeries = exponent instanceof Series;
443
+
444
+ // Pure scalar case
445
+ if (!baseIsSeries && !expIsSeries) {
446
+ return Math.pow(base as number, exponent as number);
447
+ }
448
+
449
+ // At least one is a Series - return a Series
450
+ const bars = baseIsSeries ? (base as Series).bars : (exponent as Series).bars;
451
+ const baseArray = baseIsSeries ? (base as Series).toArray() : null;
452
+ const expArray = expIsSeries ? (exponent as Series).toArray() : null;
453
+ const length = bars.length;
454
+
455
+ const result: number[] = [];
456
+ for (let i = 0; i < length; i++) {
457
+ const b = baseArray ? baseArray[i] ?? NaN : (base as number);
458
+ const e = expArray ? expArray[i] ?? NaN : (exponent as number);
459
+ result.push(Math.pow(b, e));
460
+ }
461
+
462
+ return Series.fromArray(bars, result);
463
+ }
464
+
465
+ /**
466
+ * Returns e (Euler's number) raised to the power of value.
467
+ *
468
+ * @param value - The exponent or Series
469
+ * @returns e^value (where e ≈ 2.71828)
470
+ *
471
+ * @remarks
472
+ * - e^0 = 1
473
+ * - e^1 = e ≈ 2.71828
474
+ * - Inverse of ln(x)
475
+ * - If value is a Series, returns a Series; if value is a number, returns a number
476
+ *
477
+ * @example
478
+ * ```typescript
479
+ * math.exp(0) // Returns: 1
480
+ * math.exp(1) // Returns: 2.71828... (e)
481
+ * math.exp(2) // Returns: 7.389...
482
+ * math.exp(-1) // Returns: 0.3678...
483
+ * ```
484
+ */
485
+ export function exp(value: Series): Series;
486
+ export function exp(value: float): float;
487
+ export function exp(value: float | Series): float | Series {
488
+ if (value instanceof Series) {
489
+ const bars = value.bars;
490
+ const valueArray = value.toArray();
491
+ const length = bars.length;
492
+
493
+ const result: number[] = [];
494
+ for (let i = 0; i < length; i++) {
495
+ const v = valueArray[i] ?? NaN;
496
+ result.push(Math.exp(v));
497
+ }
498
+
499
+ return Series.fromArray(bars, result);
500
+ }
501
+
502
+ return Math.exp(value);
503
+ }
504
+
505
+ /**
506
+ * Returns the natural logarithm (base e) of a number.
507
+ *
508
+ * @param value - The number (must be positive) or Series
509
+ * @returns ln(value)
510
+ *
511
+ * @remarks
512
+ * - Returns NaN for negative numbers
513
+ * - Returns -Infinity for 0
514
+ * - ln(e) = 1
515
+ * - ln(1) = 0
516
+ * - Inverse of exp(x)
517
+ * - If value is a Series, returns a Series; if value is a number, returns a number
518
+ *
519
+ * @example
520
+ * ```typescript
521
+ * math.log(1) // Returns: 0
522
+ * math.log(Math.E) // Returns: 1
523
+ * math.log(10) // Returns: 2.302...
524
+ * math.log(100) // Returns: 4.605...
525
+ * ```
526
+ */
527
+ export function log(value: Series): Series;
528
+ export function log(value: float): float;
529
+ export function log(value: float | Series): float | Series {
530
+ if (value instanceof Series) {
531
+ const bars = value.bars;
532
+ const valueArray = value.toArray();
533
+ const length = bars.length;
534
+
535
+ const result: number[] = [];
536
+ for (let i = 0; i < length; i++) {
537
+ const v = valueArray[i] ?? NaN;
538
+ result.push(Math.log(v));
539
+ }
540
+
541
+ return Series.fromArray(bars, result);
542
+ }
543
+
544
+ return Math.log(value);
545
+ }
546
+
547
+ /**
548
+ * Returns the base-10 logarithm of a number.
549
+ *
550
+ * @param value - The number (must be positive) or Series
551
+ * @returns log₁₀(value)
552
+ *
553
+ * @remarks
554
+ * - Returns NaN for negative numbers
555
+ * - Returns -Infinity for 0
556
+ * - log₁₀(10) = 1
557
+ * - log₁₀(100) = 2
558
+ * - If value is a Series, returns a Series; if value is a number, returns a number
559
+ *
560
+ * @example
561
+ * ```typescript
562
+ * math.log10(10) // Returns: 1
563
+ * math.log10(100) // Returns: 2
564
+ * math.log10(1000) // Returns: 3
565
+ * math.log10(1) // Returns: 0
566
+ * ```
567
+ */
568
+ export function log10(value: Series): Series;
569
+ export function log10(value: float): float;
570
+ export function log10(value: float | Series): float | Series {
571
+ if (value instanceof Series) {
572
+ const bars = value.bars;
573
+ const valueArray = value.toArray();
574
+ const length = bars.length;
575
+
576
+ const result: number[] = [];
577
+ for (let i = 0; i < length; i++) {
578
+ const v = valueArray[i] ?? NaN;
579
+ result.push(Math.log10(v));
580
+ }
581
+
582
+ return Series.fromArray(bars, result);
583
+ }
584
+
585
+ return Math.log10(value);
586
+ }
587
+
588
+ /**
589
+ * Returns the sine of an angle in radians.
590
+ *
591
+ * @param value - The angle in radians or Series
592
+ * @returns The sine value (range: [-1, 1])
593
+ *
594
+ * @remarks
595
+ * - Input is in radians, not degrees
596
+ * - sin(0) = 0
597
+ * - sin(π/2) = 1
598
+ * - Periodic with period 2π
599
+ * - If value is a Series, returns a Series; if value is a number, returns a number
600
+ *
601
+ * @example
602
+ * ```typescript
603
+ * math.sin(0) // Returns: 0
604
+ * math.sin(Math.PI / 2) // Returns: 1
605
+ * math.sin(Math.PI) // Returns: 0 (approximately)
606
+ * math.sin(Math.PI / 6) // Returns: 0.5
607
+ * ```
608
+ */
609
+ export function sin(value: Series): Series;
610
+ export function sin(value: float): float;
611
+ export function sin(value: float | Series): float | Series {
612
+ if (value instanceof Series) {
613
+ const bars = value.bars;
614
+ const valueArray = value.toArray();
615
+ const length = bars.length;
616
+
617
+ const result: number[] = [];
618
+ for (let i = 0; i < length; i++) {
619
+ const v = valueArray[i] ?? NaN;
620
+ result.push(Math.sin(v));
621
+ }
622
+
623
+ return Series.fromArray(bars, result);
624
+ }
625
+
626
+ return Math.sin(value);
627
+ }
628
+
629
+ /**
630
+ * Returns the cosine of an angle in radians.
631
+ *
632
+ * @param value - The angle in radians or Series
633
+ * @returns The cosine value (range: [-1, 1])
634
+ *
635
+ * @remarks
636
+ * - Input is in radians, not degrees
637
+ * - cos(0) = 1
638
+ * - cos(π/2) = 0
639
+ * - Periodic with period 2π
640
+ * - If value is a Series, returns a Series; if value is a number, returns a number
641
+ *
642
+ * @example
643
+ * ```typescript
644
+ * math.cos(0) // Returns: 1
645
+ * math.cos(Math.PI / 2) // Returns: 0 (approximately)
646
+ * math.cos(Math.PI) // Returns: -1
647
+ * math.cos(Math.PI / 3) // Returns: 0.5
648
+ * ```
649
+ */
650
+ export function cos(value: Series): Series;
651
+ export function cos(value: float): float;
652
+ export function cos(value: float | Series): float | Series {
653
+ if (value instanceof Series) {
654
+ const bars = value.bars;
655
+ const valueArray = value.toArray();
656
+ const length = bars.length;
657
+
658
+ const result: number[] = [];
659
+ for (let i = 0; i < length; i++) {
660
+ const v = valueArray[i] ?? NaN;
661
+ result.push(Math.cos(v));
662
+ }
663
+
664
+ return Series.fromArray(bars, result);
665
+ }
666
+
667
+ return Math.cos(value);
668
+ }
669
+
670
+ /**
671
+ * Returns the tangent of an angle in radians.
672
+ *
673
+ * @param value - The angle in radians or Series
674
+ * @returns The tangent value
675
+ *
676
+ * @remarks
677
+ * - Input is in radians, not degrees
678
+ * - tan(x) = sin(x) / cos(x)
679
+ * - Undefined at π/2, 3π/2, etc. (returns very large numbers)
680
+ * - Periodic with period π
681
+ * - If value is a Series, returns a Series; if value is a number, returns a number
682
+ *
683
+ * @example
684
+ * ```typescript
685
+ * math.tan(0) // Returns: 0
686
+ * math.tan(Math.PI / 4) // Returns: 1
687
+ * math.tan(Math.PI / 6) // Returns: 0.577... (1/√3)
688
+ * ```
689
+ */
690
+ export function tan(value: Series): Series;
691
+ export function tan(value: float): float;
692
+ export function tan(value: float | Series): float | Series {
693
+ if (value instanceof Series) {
694
+ const bars = value.bars;
695
+ const valueArray = value.toArray();
696
+ const length = bars.length;
697
+
698
+ const result: number[] = [];
699
+ for (let i = 0; i < length; i++) {
700
+ const v = valueArray[i] ?? NaN;
701
+ result.push(Math.tan(v));
702
+ }
703
+
704
+ return Series.fromArray(bars, result);
705
+ }
706
+
707
+ return Math.tan(value);
708
+ }
709
+
710
+ /**
711
+ * Returns the arcsine (inverse sine) of a number.
712
+ *
713
+ * @param value - The value (must be in range [-1, 1]) or Series
714
+ * @returns The angle in radians (range: [-π/2, π/2])
715
+ *
716
+ * @remarks
717
+ * - Returns NaN for values outside [-1, 1]
718
+ * - asin(sin(x)) = x for x in [-π/2, π/2]
719
+ * - asin(0) = 0
720
+ * - asin(1) = π/2
721
+ * - If value is a Series, returns a Series; if value is a number, returns a number
722
+ *
723
+ * @example
724
+ * ```typescript
725
+ * math.asin(0) // Returns: 0
726
+ * math.asin(1) // Returns: 1.5707... (π/2)
727
+ * math.asin(0.5) // Returns: 0.5235... (π/6)
728
+ * math.asin(-1) // Returns: -1.5707... (-π/2)
729
+ * ```
730
+ */
731
+ export function asin(value: Series): Series;
732
+ export function asin(value: float): float;
733
+ export function asin(value: float | Series): float | Series {
734
+ if (value instanceof Series) {
735
+ const bars = value.bars;
736
+ const valueArray = value.toArray();
737
+ const length = bars.length;
738
+
739
+ const result: number[] = [];
740
+ for (let i = 0; i < length; i++) {
741
+ const v = valueArray[i] ?? NaN;
742
+ result.push(Math.asin(v));
743
+ }
744
+
745
+ return Series.fromArray(bars, result);
746
+ }
747
+
748
+ return Math.asin(value);
749
+ }
750
+
751
+ /**
752
+ * Returns the arccosine (inverse cosine) of a number.
753
+ *
754
+ * @param value - The value (must be in range [-1, 1]) or Series
755
+ * @returns The angle in radians (range: [0, π])
756
+ *
757
+ * @remarks
758
+ * - Returns NaN for values outside [-1, 1]
759
+ * - acos(cos(x)) = x for x in [0, π]
760
+ * - acos(1) = 0
761
+ * - acos(0) = π/2
762
+ * - If value is a Series, returns a Series; if value is a number, returns a number
763
+ *
764
+ * @example
765
+ * ```typescript
766
+ * math.acos(1) // Returns: 0
767
+ * math.acos(0) // Returns: 1.5707... (π/2)
768
+ * math.acos(0.5) // Returns: 1.0471... (π/3)
769
+ * math.acos(-1) // Returns: 3.1415... (π)
770
+ * ```
771
+ */
772
+ export function acos(value: Series): Series;
773
+ export function acos(value: float): float;
774
+ export function acos(value: float | Series): float | Series {
775
+ if (value instanceof Series) {
776
+ const bars = value.bars;
777
+ const valueArray = value.toArray();
778
+ const length = bars.length;
779
+
780
+ const result: number[] = [];
781
+ for (let i = 0; i < length; i++) {
782
+ const v = valueArray[i] ?? NaN;
783
+ result.push(Math.acos(v));
784
+ }
785
+
786
+ return Series.fromArray(bars, result);
787
+ }
788
+
789
+ return Math.acos(value);
790
+ }
791
+
792
+ /**
793
+ * Returns the arctangent (inverse tangent) of a number.
794
+ *
795
+ * @param value - The value or Series
796
+ * @returns The angle in radians (range: [-π/2, π/2])
797
+ *
798
+ * @remarks
799
+ * - Accepts any number as input
800
+ * - atan(tan(x)) = x for x in [-π/2, π/2]
801
+ * - atan(0) = 0
802
+ * - atan(1) = π/4
803
+ * - If value is a Series, returns a Series; if value is a number, returns a number
804
+ *
805
+ * @example
806
+ * ```typescript
807
+ * math.atan(0) // Returns: 0
808
+ * math.atan(1) // Returns: 0.7853... (π/4)
809
+ * math.atan(-1) // Returns: -0.7853... (-π/4)
810
+ * math.atan(Infinity) // Returns: 1.5707... (π/2)
811
+ * ```
812
+ */
813
+ export function atan(value: Series): Series;
814
+ export function atan(value: float): float;
815
+ export function atan(value: float | Series): float | Series {
816
+ if (value instanceof Series) {
817
+ const bars = value.bars;
818
+ const valueArray = value.toArray();
819
+ const length = bars.length;
820
+
821
+ const result: number[] = [];
822
+ for (let i = 0; i < length; i++) {
823
+ const v = valueArray[i] ?? NaN;
824
+ result.push(Math.atan(v));
825
+ }
826
+
827
+ return Series.fromArray(bars, result);
828
+ }
829
+
830
+ return Math.atan(value);
831
+ }
832
+
833
+ /**
834
+ * Converts an angle from degrees to radians.
835
+ *
836
+ * @param degrees - The angle in degrees or Series
837
+ * @returns The angle in radians
838
+ *
839
+ * @remarks
840
+ * - Radians = Degrees × (π / 180)
841
+ * - One full rotation: 360° = 2π radians
842
+ * - Common conversions: 90° = π/2, 180° = π, 270° = 3π/2
843
+ * - If degrees is a Series, returns a Series; if degrees is a number, returns a number
844
+ *
845
+ * @example
846
+ * ```typescript
847
+ * math.toradians(0) // Returns: 0
848
+ * math.toradians(90) // Returns: 1.5707... (π/2)
849
+ * math.toradians(180) // Returns: 3.1415... (π)
850
+ * math.toradians(360) // Returns: 6.2831... (2π)
851
+ * ```
852
+ */
853
+ export function toradians(degrees: Series): Series;
854
+ export function toradians(degrees: float): float;
855
+ export function toradians(degrees: float | Series): float | Series {
856
+ if (degrees instanceof Series) {
857
+ const bars = degrees.bars;
858
+ const valueArray = degrees.toArray();
859
+ const length = bars.length;
860
+
861
+ const result: number[] = [];
862
+ for (let i = 0; i < length; i++) {
863
+ const v = valueArray[i] ?? NaN;
864
+ result.push(v * (Math.PI / 180));
865
+ }
866
+
867
+ return Series.fromArray(bars, result);
868
+ }
869
+
870
+ return degrees * (Math.PI / 180);
871
+ }
872
+
873
+ /**
874
+ * Converts an angle from radians to degrees.
875
+ *
876
+ * @param radians - The angle in radians or Series
877
+ * @returns The angle in degrees
878
+ *
879
+ * @remarks
880
+ * - Degrees = Radians × (180 / π)
881
+ * - One full rotation: 2π radians = 360°
882
+ * - Common conversions: π/2 = 90°, π = 180°, 3π/2 = 270°
883
+ * - If radians is a Series, returns a Series; if radians is a number, returns a number
884
+ *
885
+ * @example
886
+ * ```typescript
887
+ * math.todegrees(0) // Returns: 0
888
+ * math.todegrees(Math.PI / 2) // Returns: 90
889
+ * math.todegrees(Math.PI) // Returns: 180
890
+ * math.todegrees(2 * Math.PI) // Returns: 360
891
+ * ```
892
+ */
893
+ export function todegrees(radians: Series): Series;
894
+ export function todegrees(radians: float): float;
895
+ export function todegrees(radians: float | Series): float | Series {
896
+ if (radians instanceof Series) {
897
+ const bars = radians.bars;
898
+ const valueArray = radians.toArray();
899
+ const length = bars.length;
900
+
901
+ const result: number[] = [];
902
+ for (let i = 0; i < length; i++) {
903
+ const v = valueArray[i] ?? NaN;
904
+ result.push(v * (180 / Math.PI));
905
+ }
906
+
907
+ return Series.fromArray(bars, result);
908
+ }
909
+
910
+ return radians * (180 / Math.PI);
911
+ }
912
+
913
+ /**
914
+ * Returns a pseudo-random number.
915
+ *
916
+ * @param min - Optional minimum value (inclusive)
917
+ * @param max - Optional maximum value (exclusive)
918
+ * @param seed - Optional seed for deterministic random
919
+ * @returns A random number in the specified range, or [0, 1) if no range specified
920
+ *
921
+ * @remarks
922
+ * - Without arguments: returns value in [0, 1)
923
+ * - With min and max: returns value in [min, max)
924
+ * - **WARNING**: The seed parameter is accepted for API compatibility but NOT currently implemented
925
+ * - This implementation always generates non-deterministic random values
926
+ * - PineScript's version supports deterministic seeding for repeatable sequences
927
+ *
928
+ * @example
929
+ * ```typescript
930
+ * math.random() // Returns: value between 0 and 1 (e.g., 0.234...)
931
+ * math.random(0, 10) // Returns: value between 0 and 10 (e.g., 7.45...)
932
+ * math.random(5, 15) // Returns: value between 5 and 15 (e.g., 11.82...)
933
+ * ```
934
+ */
935
+ export function random(min?: float, max?: float, _seed?: int): float {
936
+ // TODO: Implement deterministic seeding to match PineScript behavior
937
+ // Currently _seed parameter is ignored
938
+ const rand = Math.random();
939
+ if (min !== undefined && max !== undefined) {
940
+ return min + rand * (max - min);
941
+ }
942
+ return rand;
943
+ }
944
+
945
+ /**
946
+ * Returns the sign of a number.
947
+ *
948
+ * @param value - The number to check or Series
949
+ * @returns 1 for positive, -1 for negative, 0 for zero
950
+ *
951
+ * @remarks
952
+ * - Returns 1 if value > 0
953
+ * - Returns -1 if value < 0
954
+ * - Returns 0 if value = 0
955
+ * - Useful for determining direction or polarity
956
+ * - If value is a Series, returns a Series; if value is a number, returns a number
957
+ *
958
+ * @example
959
+ * ```typescript
960
+ * math.sign(5) // Returns: 1
961
+ * math.sign(-3) // Returns: -1
962
+ * math.sign(0) // Returns: 0
963
+ * math.sign(0.001) // Returns: 1
964
+ * ```
965
+ */
966
+ export function sign(value: Series): Series;
967
+ export function sign(value: float): int;
968
+ export function sign(value: float | Series): int | Series {
969
+ if (value instanceof Series) {
970
+ const bars = value.bars;
971
+ const valueArray = value.toArray();
972
+ const length = bars.length;
973
+
974
+ const result: number[] = [];
975
+ for (let i = 0; i < length; i++) {
976
+ const v = valueArray[i] ?? NaN;
977
+ result.push(v > 0 ? 1 : v < 0 ? -1 : 0);
978
+ }
979
+
980
+ return Series.fromArray(bars, result);
981
+ }
982
+
983
+ return value > 0 ? 1 : value < 0 ? -1 : 0;
984
+ }
985
+
986
+ /**
987
+ * Rounds a value to the nearest mintick.
988
+ *
989
+ * @param number - The number to round or Series
990
+ * @param mintick - Optional mintick value (defaults to requiring syminfo context)
991
+ * @returns The number rounded to tick precision
992
+ *
993
+ * @remarks
994
+ * - **PineScript v6 signature**: `math.round_to_mintick(number)` - uses implicit syminfo.mintick
995
+ * - **JavaScript signature**: Requires explicit `mintick` OR use `createContext()` with syminfo
996
+ * - Rounds to the nearest value divisible by mintick
997
+ * - Returns NaN for NaN input
998
+ * - Ties round up (0.5 -> 1)
999
+ * - If number is a Series, returns a Series; if number is a float, returns a float
1000
+ *
1001
+ * @example
1002
+ * ```typescript
1003
+ * // Direct call with explicit mintick
1004
+ * const rounded = math.round_to_mintick(1.2345, 0.01); // Returns: 1.23
1005
+ * const rounded2 = math.round_to_mintick(1.2367, 0.01); // Returns: 1.24
1006
+ *
1007
+ * // Or use context API for cleaner syntax
1008
+ * const { math } = createContext({ syminfo: { mintick: 0.01 } });
1009
+ * const rounded = math.round_to_mintick(1.2345); // Returns: 1.23
1010
+ * ```
1011
+ */
1012
+ export function round_to_mintick(number: Series, mintick?: float): Series;
1013
+ export function round_to_mintick(number: float, mintick?: float): float;
1014
+ export function round_to_mintick(number: float | Series, mintick?: float): float | Series {
1015
+ if (number instanceof Series) {
1016
+ const bars = number.bars;
1017
+ const valueArray = number.toArray();
1018
+ const length = bars.length;
1019
+
1020
+ if (mintick === undefined) {
1021
+ throw new Error(
1022
+ 'math.round_to_mintick() requires mintick value. ' +
1023
+ 'Either pass it explicitly or use createContext({ syminfo: { mintick } }) for implicit data.'
1024
+ );
1025
+ }
1026
+
1027
+ const result: number[] = [];
1028
+ if (mintick === 0) {
1029
+ // No rounding needed
1030
+ for (let i = 0; i < length; i++) {
1031
+ result.push(valueArray[i] ?? NaN);
1032
+ }
1033
+ } else {
1034
+ for (let i = 0; i < length; i++) {
1035
+ const v = valueArray[i];
1036
+ if (v === undefined || isNaN(v)) {
1037
+ result.push(NaN);
1038
+ } else {
1039
+ result.push(Math.round(v / mintick) * mintick);
1040
+ }
1041
+ }
1042
+ }
1043
+
1044
+ return Series.fromArray(bars, result);
1045
+ }
1046
+
1047
+ // Scalar case
1048
+ if (isNaN(number)) {
1049
+ return NaN;
1050
+ }
1051
+
1052
+ if (mintick === undefined) {
1053
+ throw new Error(
1054
+ 'math.round_to_mintick() requires mintick value. ' +
1055
+ 'Either pass it explicitly or use createContext({ syminfo: { mintick } }) for implicit data.'
1056
+ );
1057
+ }
1058
+
1059
+ if (mintick === 0) {
1060
+ return number;
1061
+ }
1062
+
1063
+ // Round to nearest tick
1064
+ return Math.round(number / mintick) * mintick;
1065
+ }
1066
+
1067
+ // Constants
1068
+ export const pi = Math.PI;
1069
+ export const e = Math.E;
1070
+ export const phi = 1.618033988749895; // Golden ratio
1071
+ export const rphi = 0.618033988749895; // Reciprocal of golden ratio