oakscriptpy 0.1.2__tar.gz → 0.1.4__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 (98) hide show
  1. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/PKG-INFO +1 -1
  2. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/pyproject.toml +1 -1
  3. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/__init__.py +1 -1
  4. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/_types.py +21 -1
  5. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/ta.py +10 -4
  6. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/.github/workflows/publish.yml +0 -0
  7. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/.gitignore +0 -0
  8. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/DEVLOG.md +0 -0
  9. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/README.md +0 -0
  10. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/logo.png +0 -0
  11. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/_metadata.py +0 -0
  12. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/_utils.py +0 -0
  13. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/adapters/__init__.py +0 -0
  14. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/adapters/simple_input.py +0 -0
  15. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/array.py +0 -0
  16. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/box.py +0 -0
  17. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/chartpoint.py +0 -0
  18. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/color.py +0 -0
  19. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/indicator.py +0 -0
  20. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/input_.py +0 -0
  21. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/inputs.py +0 -0
  22. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/label.py +0 -0
  23. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/lib/__init__.py +0 -0
  24. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/lib/zigzag.py +0 -0
  25. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/line.py +0 -0
  26. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/linefill.py +0 -0
  27. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/math_.py +0 -0
  28. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/matrix.py +0 -0
  29. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/plot_.py +0 -0
  30. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/polyline.py +0 -0
  31. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/runtime.py +0 -0
  32. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/runtime_types.py +0 -0
  33. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/series.py +0 -0
  34. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/str_.py +0 -0
  35. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/ta_series.py +0 -0
  36. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/src/oakscriptpy/time_.py +0 -0
  37. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/__init__.py +0 -0
  38. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/__init__.py +0 -0
  39. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/test_drawing_objects.py +0 -0
  40. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/test_final_functions.py +0 -0
  41. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/test_new_functions.py +0 -0
  42. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/test_percentile.py +0 -0
  43. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/array/test_search_and_stats.py +0 -0
  44. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/box/__init__.py +0 -0
  45. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/box/test_box.py +0 -0
  46. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/chartpoint/__init__.py +0 -0
  47. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/chartpoint/test_chartpoint.py +0 -0
  48. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/color/__init__.py +0 -0
  49. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/color/test_components.py +0 -0
  50. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/color/test_constants.py +0 -0
  51. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/color/test_creation.py +0 -0
  52. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/color/test_manipulation.py +0 -0
  53. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/conftest.py +0 -0
  54. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/indicator/__init__.py +0 -0
  55. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/indicator/test_indicator.py +0 -0
  56. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/label/__init__.py +0 -0
  57. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/label/test_label.py +0 -0
  58. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/line/__init__.py +0 -0
  59. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/line/test_line.py +0 -0
  60. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/linefill/__init__.py +0 -0
  61. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/linefill/test_linefill.py +0 -0
  62. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/__init__.py +0 -0
  63. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_algebraic.py +0 -0
  64. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_basic.py +0 -0
  65. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_series_support.py +0 -0
  66. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_sum_series.py +0 -0
  67. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_trigonometric.py +0 -0
  68. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/math/test_utility.py +0 -0
  69. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/matrix/__init__.py +0 -0
  70. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/matrix/test_foundational.py +0 -0
  71. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/matrix/test_linear_algebra.py +0 -0
  72. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/matrix/test_manipulation.py +0 -0
  73. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/polyline/__init__.py +0 -0
  74. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/polyline/test_polyline.py +0 -0
  75. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/runtime/__init__.py +0 -0
  76. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/runtime/test_adapters.py +0 -0
  77. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/runtime/test_inputs.py +0 -0
  78. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/runtime/test_runtime.py +0 -0
  79. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/runtime/test_series.py +0 -0
  80. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/__init__.py +0 -0
  81. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_conversion.py +0 -0
  82. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_formatting.py +0 -0
  83. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_manipulation.py +0 -0
  84. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_predicates.py +0 -0
  85. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_search.py +0 -0
  86. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/str/test_whitespace.py +0 -0
  87. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/__init__.py +0 -0
  88. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_ichimoku.py +0 -0
  89. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_new_functions.py +0 -0
  90. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_new_functions2.py +0 -0
  91. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_new_functions3.py +0 -0
  92. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_new_ta_functions.py +0 -0
  93. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_rsi.py +0 -0
  94. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_sma.py +0 -0
  95. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_supertrend.py +0 -0
  96. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_ta_series_integration.py +0 -0
  97. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/ta/test_zigzag.py +0 -0
  98. {oakscriptpy-0.1.2 → oakscriptpy-0.1.4}/tests/test_new_functions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oakscriptpy
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: PineScript-like API for technical analysis in Python
5
5
  Project-URL: Homepage, https://github.com/deepentropy/oakscriptPy
6
6
  Project-URL: Repository, https://github.com/deepentropy/oakscriptPy
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "oakscriptpy"
3
- version = "0.1.2"
3
+ version = "0.1.4"
4
4
  description = "PineScript-like API for technical analysis in Python"
5
5
  requires-python = ">=3.11"
6
6
  dependencies = []
@@ -78,7 +78,7 @@ def alertcondition(_condition: object = None, _title: str | None = None, _messag
78
78
  pass
79
79
 
80
80
 
81
- VERSION = "0.1.0"
81
+ VERSION = "0.1.4"
82
82
 
83
83
  info = {
84
84
  "name": "OakScriptPy",
@@ -15,7 +15,27 @@ Source = list[float]
15
15
  color = str | int
16
16
 
17
17
  # Constants
18
- na = None
18
+ import math as _math
19
+
20
+
21
+ class _Na:
22
+ """PineScript-compatible NA: falsy constant + callable checker."""
23
+
24
+ def __call__(self, value: object) -> bool:
25
+ if value is None:
26
+ return True
27
+ if isinstance(value, float) and _math.isnan(value):
28
+ return True
29
+ return False
30
+
31
+ def __bool__(self) -> bool:
32
+ return False
33
+
34
+ def __repr__(self) -> str:
35
+ return "na"
36
+
37
+
38
+ na = _Na()
19
39
 
20
40
 
21
41
  class _Xloc:
@@ -133,7 +133,9 @@ def stdev(source: Source, length: int) -> series_float:
133
133
  return result
134
134
 
135
135
 
136
- def crossover(series1: Source, series2: Source) -> series_bool:
136
+ def crossover(series1: Source, series2: Source | float | int) -> series_bool:
137
+ if isinstance(series2, (int, float)):
138
+ series2 = [float(series2)] * len(series1)
137
139
  result: series_bool = []
138
140
 
139
141
  for i in range(len(series1)):
@@ -145,7 +147,9 @@ def crossover(series1: Source, series2: Source) -> series_bool:
145
147
  return result
146
148
 
147
149
 
148
- def crossunder(series1: Source, series2: Source) -> series_bool:
150
+ def crossunder(series1: Source, series2: Source | float | int) -> series_bool:
151
+ if isinstance(series2, (int, float)):
152
+ series2 = [float(series2)] * len(series1)
149
153
  result: series_bool = []
150
154
 
151
155
  for i in range(len(series1)):
@@ -365,7 +369,9 @@ def cum(source: Source) -> series_float:
365
369
  return result
366
370
 
367
371
 
368
- def cross(source1: Source, source2: Source) -> series_bool:
372
+ def cross(source1: Source, source2: Source | float | int) -> series_bool:
373
+ if isinstance(source2, (int, float)):
374
+ source2 = [float(source2)] * len(source1)
369
375
  result: series_bool = []
370
376
 
371
377
  for i in range(len(source1)):
@@ -868,7 +874,7 @@ def pivothigh(source_or_leftbars, leftbars_or_rightbars, rightbars=None, high=No
868
874
 
869
875
  if is_pivot:
870
876
  for j in range(1, right + 1):
871
- if source[i + j] > center_value:
877
+ if source[i + j] >= center_value:
872
878
  is_pivot = False
873
879
  break
874
880
 
File without changes
File without changes
File without changes
File without changes