onetick-py 1.177.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. locator_parser/__init__.py +0 -0
  2. locator_parser/acl.py +73 -0
  3. locator_parser/actions.py +262 -0
  4. locator_parser/common.py +368 -0
  5. locator_parser/io.py +43 -0
  6. locator_parser/locator.py +150 -0
  7. onetick/__init__.py +101 -0
  8. onetick/doc_utilities/__init__.py +3 -0
  9. onetick/doc_utilities/napoleon.py +40 -0
  10. onetick/doc_utilities/ot_doctest.py +140 -0
  11. onetick/doc_utilities/snippets.py +279 -0
  12. onetick/lib/__init__.py +4 -0
  13. onetick/lib/instance.py +141 -0
  14. onetick/py/__init__.py +293 -0
  15. onetick/py/_stack_info.py +89 -0
  16. onetick/py/_version.py +2 -0
  17. onetick/py/aggregations/__init__.py +11 -0
  18. onetick/py/aggregations/_base.py +648 -0
  19. onetick/py/aggregations/_docs.py +948 -0
  20. onetick/py/aggregations/compute.py +286 -0
  21. onetick/py/aggregations/functions.py +2216 -0
  22. onetick/py/aggregations/generic.py +104 -0
  23. onetick/py/aggregations/high_low.py +80 -0
  24. onetick/py/aggregations/num_distinct.py +83 -0
  25. onetick/py/aggregations/order_book.py +501 -0
  26. onetick/py/aggregations/other.py +1014 -0
  27. onetick/py/backports.py +26 -0
  28. onetick/py/cache.py +374 -0
  29. onetick/py/callback/__init__.py +5 -0
  30. onetick/py/callback/callback.py +276 -0
  31. onetick/py/callback/callbacks.py +131 -0
  32. onetick/py/compatibility.py +798 -0
  33. onetick/py/configuration.py +771 -0
  34. onetick/py/core/__init__.py +0 -0
  35. onetick/py/core/_csv_inspector.py +93 -0
  36. onetick/py/core/_internal/__init__.py +0 -0
  37. onetick/py/core/_internal/_manually_bound_value.py +6 -0
  38. onetick/py/core/_internal/_nodes_history.py +250 -0
  39. onetick/py/core/_internal/_op_utils/__init__.py +0 -0
  40. onetick/py/core/_internal/_op_utils/every_operand.py +9 -0
  41. onetick/py/core/_internal/_op_utils/is_const.py +10 -0
  42. onetick/py/core/_internal/_per_tick_scripts/tick_list_sort_template.script +121 -0
  43. onetick/py/core/_internal/_proxy_node.py +140 -0
  44. onetick/py/core/_internal/_state_objects.py +2312 -0
  45. onetick/py/core/_internal/_state_vars.py +93 -0
  46. onetick/py/core/_source/__init__.py +0 -0
  47. onetick/py/core/_source/_symbol_param.py +95 -0
  48. onetick/py/core/_source/schema.py +97 -0
  49. onetick/py/core/_source/source_methods/__init__.py +0 -0
  50. onetick/py/core/_source/source_methods/aggregations.py +809 -0
  51. onetick/py/core/_source/source_methods/applyers.py +296 -0
  52. onetick/py/core/_source/source_methods/columns.py +141 -0
  53. onetick/py/core/_source/source_methods/data_quality.py +301 -0
  54. onetick/py/core/_source/source_methods/debugs.py +272 -0
  55. onetick/py/core/_source/source_methods/drops.py +120 -0
  56. onetick/py/core/_source/source_methods/fields.py +619 -0
  57. onetick/py/core/_source/source_methods/filters.py +1002 -0
  58. onetick/py/core/_source/source_methods/joins.py +1413 -0
  59. onetick/py/core/_source/source_methods/merges.py +605 -0
  60. onetick/py/core/_source/source_methods/misc.py +1455 -0
  61. onetick/py/core/_source/source_methods/pandases.py +155 -0
  62. onetick/py/core/_source/source_methods/renames.py +356 -0
  63. onetick/py/core/_source/source_methods/sorts.py +183 -0
  64. onetick/py/core/_source/source_methods/switches.py +142 -0
  65. onetick/py/core/_source/source_methods/symbols.py +117 -0
  66. onetick/py/core/_source/source_methods/times.py +627 -0
  67. onetick/py/core/_source/source_methods/writes.py +986 -0
  68. onetick/py/core/_source/symbol.py +205 -0
  69. onetick/py/core/_source/tmp_otq.py +222 -0
  70. onetick/py/core/column.py +209 -0
  71. onetick/py/core/column_operations/__init__.py +0 -0
  72. onetick/py/core/column_operations/_methods/__init__.py +4 -0
  73. onetick/py/core/column_operations/_methods/_internal.py +28 -0
  74. onetick/py/core/column_operations/_methods/conversions.py +216 -0
  75. onetick/py/core/column_operations/_methods/methods.py +292 -0
  76. onetick/py/core/column_operations/_methods/op_types.py +160 -0
  77. onetick/py/core/column_operations/accessors/__init__.py +0 -0
  78. onetick/py/core/column_operations/accessors/_accessor.py +28 -0
  79. onetick/py/core/column_operations/accessors/decimal_accessor.py +104 -0
  80. onetick/py/core/column_operations/accessors/dt_accessor.py +537 -0
  81. onetick/py/core/column_operations/accessors/float_accessor.py +184 -0
  82. onetick/py/core/column_operations/accessors/str_accessor.py +1367 -0
  83. onetick/py/core/column_operations/base.py +1121 -0
  84. onetick/py/core/cut_builder.py +150 -0
  85. onetick/py/core/db_constants.py +20 -0
  86. onetick/py/core/eval_query.py +245 -0
  87. onetick/py/core/lambda_object.py +441 -0
  88. onetick/py/core/multi_output_source.py +232 -0
  89. onetick/py/core/per_tick_script.py +2256 -0
  90. onetick/py/core/query_inspector.py +464 -0
  91. onetick/py/core/source.py +1744 -0
  92. onetick/py/db/__init__.py +2 -0
  93. onetick/py/db/_inspection.py +1128 -0
  94. onetick/py/db/db.py +1327 -0
  95. onetick/py/db/utils.py +64 -0
  96. onetick/py/docs/__init__.py +0 -0
  97. onetick/py/docs/docstring_parser.py +112 -0
  98. onetick/py/docs/utils.py +81 -0
  99. onetick/py/functions.py +2398 -0
  100. onetick/py/license.py +190 -0
  101. onetick/py/log.py +88 -0
  102. onetick/py/math.py +935 -0
  103. onetick/py/misc.py +470 -0
  104. onetick/py/oqd/__init__.py +22 -0
  105. onetick/py/oqd/eps.py +1195 -0
  106. onetick/py/oqd/sources.py +325 -0
  107. onetick/py/otq.py +216 -0
  108. onetick/py/pyomd_mock.py +47 -0
  109. onetick/py/run.py +916 -0
  110. onetick/py/servers.py +173 -0
  111. onetick/py/session.py +1347 -0
  112. onetick/py/sources/__init__.py +19 -0
  113. onetick/py/sources/cache.py +167 -0
  114. onetick/py/sources/common.py +128 -0
  115. onetick/py/sources/csv.py +642 -0
  116. onetick/py/sources/custom.py +85 -0
  117. onetick/py/sources/data_file.py +305 -0
  118. onetick/py/sources/data_source.py +1045 -0
  119. onetick/py/sources/empty.py +94 -0
  120. onetick/py/sources/odbc.py +337 -0
  121. onetick/py/sources/order_book.py +271 -0
  122. onetick/py/sources/parquet.py +168 -0
  123. onetick/py/sources/pit.py +191 -0
  124. onetick/py/sources/query.py +495 -0
  125. onetick/py/sources/snapshots.py +419 -0
  126. onetick/py/sources/split_query_output_by_symbol.py +198 -0
  127. onetick/py/sources/symbology_mapping.py +123 -0
  128. onetick/py/sources/symbols.py +374 -0
  129. onetick/py/sources/ticks.py +825 -0
  130. onetick/py/sql.py +70 -0
  131. onetick/py/state.py +251 -0
  132. onetick/py/types.py +2131 -0
  133. onetick/py/utils/__init__.py +70 -0
  134. onetick/py/utils/acl.py +93 -0
  135. onetick/py/utils/config.py +186 -0
  136. onetick/py/utils/default.py +49 -0
  137. onetick/py/utils/file.py +38 -0
  138. onetick/py/utils/helpers.py +76 -0
  139. onetick/py/utils/locator.py +94 -0
  140. onetick/py/utils/perf.py +498 -0
  141. onetick/py/utils/query.py +49 -0
  142. onetick/py/utils/render.py +1374 -0
  143. onetick/py/utils/script.py +244 -0
  144. onetick/py/utils/temp.py +471 -0
  145. onetick/py/utils/types.py +120 -0
  146. onetick/py/utils/tz.py +84 -0
  147. onetick_py-1.177.0.dist-info/METADATA +137 -0
  148. onetick_py-1.177.0.dist-info/RECORD +152 -0
  149. onetick_py-1.177.0.dist-info/WHEEL +5 -0
  150. onetick_py-1.177.0.dist-info/entry_points.txt +2 -0
  151. onetick_py-1.177.0.dist-info/licenses/LICENSE +21 -0
  152. onetick_py-1.177.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,142 @@
1
+ from typing import TYPE_CHECKING, Tuple
2
+
3
+ from onetick import py as otp
4
+ from onetick.py.otq import otq
5
+
6
+ if TYPE_CHECKING:
7
+ from onetick.py.core.source import Source
8
+
9
+
10
+ def split(self: 'Source', expr, cases, default=False) -> Tuple['Source', ...]:
11
+ """
12
+ The method splits data using passed expression ``expr`` for several
13
+ outputs by passed ``cases``. The method is the alias for the :meth:`Source.switch`
14
+
15
+ Parameters
16
+ ----------
17
+ expr : Operation
18
+ column or column based expression
19
+ cases : list
20
+ list of values or :py:class:`onetick.py.range` objects to split by
21
+ default : bool
22
+ ``True`` adds the default output
23
+
24
+ Returns
25
+ -------
26
+ Outputs according to passed cases, number of outputs is number of cases plus one if ``default=True``
27
+
28
+ See also
29
+ --------
30
+ | :meth:`Source.switch`
31
+ | **SWITCH** OneTick event processor
32
+
33
+ Examples
34
+ --------
35
+ >>> # OTdirective: snippet-name: Source operations.split;
36
+ >>> data = otp.Ticks(X=[0.33, -5.1, otp.nan, 9.4])
37
+ >>> r1, r2, r3 = data.split(data['X'], [otp.nan, otp.range(0, 100)], default=True)
38
+ >>> otp.run(r1)
39
+ Time X
40
+ 0 2003-12-01 00:00:00.002 NaN
41
+ >>> otp.run(r2)
42
+ Time X
43
+ 0 2003-12-01 00:00:00.000 0.33
44
+ 1 2003-12-01 00:00:00.003 9.40
45
+ >>> otp.run(r3)
46
+ Time X
47
+ 0 2003-12-01 00:00:00.001 -5.1
48
+
49
+ See Also
50
+ --------
51
+ Source.switch
52
+ :py:class:`onetick.py.range`
53
+ """
54
+
55
+ output_num = len(cases)
56
+
57
+ # format cases
58
+ def to_str(v):
59
+ if isinstance(v, otp.utils.range):
60
+ return "[" + str(v.start) + "," + str(v.stop) + "]"
61
+ elif isinstance(v, str):
62
+ return '"' + v + '"'
63
+ elif isinstance(v, tuple):
64
+ return ",".join(map(to_str, list(v)))
65
+
66
+ return str(v)
67
+
68
+ cases = [f"{to_str(cases[inx])}:OUT{inx}" for inx in range(output_num)]
69
+
70
+ # create ep
71
+ params = dict(switch=str(expr), cases=";".join(cases))
72
+ if default:
73
+ params["default_output"] = "DEF_OUT"
74
+
75
+ switch_branch = self.copy(ep=otq.SwitchEp(**params))
76
+
77
+ # construct results
78
+ result = []
79
+
80
+ for inx in range(output_num):
81
+ res = switch_branch.copy()
82
+ res.node().out_pin(f"OUT{inx}")
83
+ res.sink(otq.Passthrough())
84
+
85
+ result.append(res)
86
+
87
+ if default:
88
+ res = switch_branch.copy()
89
+ res.node().out_pin("DEF_OUT")
90
+ res.sink(otq.Passthrough())
91
+
92
+ result.append(res)
93
+
94
+ return tuple(result)
95
+
96
+
97
+ def switch(self: 'Source', expr, cases, default=False) -> Tuple['Source', ...]:
98
+ """
99
+ The method splits data using passed expression for several
100
+ outputs by passed cases. This method is an alias for
101
+ :meth:`Source.split` method.
102
+
103
+ Parameters
104
+ ----------
105
+ expr : Operation
106
+ column or column based expression
107
+ cases : list
108
+ list of values or :py:class:`onetick.py.range` objects to split by
109
+ default : bool
110
+ ``True`` adds the default output
111
+
112
+ Returns
113
+ -------
114
+ Outputs according to passed cases, number of outputs is number of cases plus one if ``default=True``
115
+
116
+ See also
117
+ --------
118
+ | :meth:`Source.split`
119
+ | **SWITCH** OneTick event processor
120
+
121
+ Examples
122
+ --------
123
+ >>> data = otp.Ticks(X=[0.33, -5.1, otp.nan, 9.4])
124
+ >>> r1, r2, r3 = data.switch(data['X'], [otp.nan, otp.range(0, 100)], default=True)
125
+ >>> otp.run(r1)
126
+ Time X
127
+ 0 2003-12-01 00:00:00.002 NaN
128
+ >>> otp.run(r2)
129
+ Time X
130
+ 0 2003-12-01 00:00:00.000 0.33
131
+ 1 2003-12-01 00:00:00.003 9.40
132
+ >>> otp.run(r3)
133
+ Time X
134
+ 0 2003-12-01 00:00:00.001 -5.1
135
+
136
+ See Also
137
+ --------
138
+ Source.split
139
+ :py:class:`onetick.py.range`
140
+ """
141
+
142
+ return self.split(expr, cases, default)
@@ -0,0 +1,117 @@
1
+ from typing import TYPE_CHECKING, Optional, Union
2
+
3
+ from onetick.py import types as ott
4
+ from onetick.py.core.column_operations.base import _Operation
5
+ from onetick.py.otq import otq
6
+
7
+ from .misc import inplace_operation
8
+
9
+ if TYPE_CHECKING:
10
+ import onetick.py as otp
11
+ from onetick.py.core.source import Source
12
+
13
+
14
+ @inplace_operation
15
+ def show_symbol_name_in_db(self: 'Source', inplace=False) -> Optional['Source']:
16
+ """
17
+ Adds the **SYMBOL_NAME_IN_DB** field to input ticks,
18
+ indicating the symbol name of the tick in the database.
19
+
20
+ Parameters
21
+ ----------
22
+ inplace: bool
23
+ The flag controls whether operation should be applied inplace or not.
24
+ If ``inplace=True``, then it returns nothing.
25
+ Otherwise method returns a new modified object.
26
+
27
+ See also
28
+ --------
29
+ **SHOW_SYMBOL_NAME_IN_DB** OneTick event processor
30
+
31
+ Returns
32
+ -------
33
+ :class:`Source` or ``None``
34
+
35
+ Examples
36
+ --------
37
+
38
+ For example, it can be used to display
39
+ the actual symbol name for the contract (e.g., **ESM23**)
40
+ instead of the artificial continuous name **ES_r_tdi**.
41
+ Notice how actual symbol name can be different for each tick,
42
+ e.g. in this case it is different for each month.
43
+
44
+ >>> data = otp.DataSource('TDI_FUT', tick_type='TRD') # doctest: +SKIP
45
+ >>> data = data[['PRICE']] # doctest: +SKIP
46
+ >>> data = data.first(bucket_interval=31, bucket_units='days') # doctest: +SKIP
47
+ >>> data['SYMBOL_NAME'] = data.Symbol.name # doctest: +SKIP
48
+ >>> data = data.show_symbol_name_in_db() # doctest: +SKIP
49
+ >>> otp.run(data, # doctest: +SKIP
50
+ ... symbols='ES_r_tdi', symbol_date=otp.dt(2023, 3, 1),
51
+ ... start=otp.dt(2023, 3, 1), end=otp.dt(2023, 5, 1))
52
+ Time PRICE SYMBOL_NAME SYMBOL_NAME_IN_DB
53
+ 0 2023-03-01 00:00:00.549 3976.75 ES_r_tdi ESH23
54
+ 1 2023-04-02 18:00:00.039 4127.00 ES_r_tdi ESM23
55
+ """
56
+ if 'SYMBOL_NAME_IN_DB' in self.schema:
57
+ raise ValueError("Column 'SYMBOL_NAME_IN_DB' already exists.")
58
+ self.sink(otq.ShowSymbolNameInDb())
59
+ self.schema['SYMBOL_NAME_IN_DB'] = str
60
+ return self
61
+
62
+
63
+ @inplace_operation
64
+ def modify_symbol_name(
65
+ self: 'Source', symbol_name: Union[str, 'otp.Operation', 'otp.Column'], inplace=False
66
+ ) -> Optional['Source']:
67
+ """
68
+ Modifies the name of the symbol that provides input ticks for this node.
69
+ Uses MODIFY_SYMBOL_NAME EP.
70
+
71
+ Parameters
72
+ ----------
73
+ symbol_name: str, :py:class:`~onetick.py.Column`, :py:class:`~onetick.py.Operation`
74
+ String or expression with new `SYMBOL_NAME` value.
75
+ New `SYMBOL_NAME` must not depend on ticks, if set via expression.
76
+ inplace: bool
77
+ The flag controls whether operation should be applied inplace or not.
78
+ If ``inplace=True``, then it returns nothing.
79
+ Otherwise method returns a new modified object.
80
+
81
+ See also
82
+ --------
83
+ **MODIFY_SYMBOL_NAME** OneTick event processor
84
+
85
+ Returns
86
+ -------
87
+ :class:`Source` or ``None``
88
+
89
+ Examples
90
+ --------
91
+ Replacing with static string:
92
+
93
+ >>> data = otp.DataSource('SOME_DB', symbol='S1', tick_type='TT')
94
+ >>> data = data.modify_symbol_name(symbol_name='S2')
95
+ >>> otp.run(data)
96
+ Time X
97
+ 0 2003-12-01 00:00:00.000 -3
98
+ 1 2003-12-01 00:00:00.001 -2
99
+ 2 2003-12-01 00:00:00.002 -1
100
+
101
+ Replacing with expression:
102
+
103
+ >>> data = otp.DataSource('SOME_DB', symbol='S2', tick_type='TT')
104
+ >>> data = data.modify_symbol_name(symbol_name=data['_SYMBOL_NAME'].str.replace('2', '1'))
105
+ >>> otp.run(data)
106
+ Time X
107
+ 0 2003-12-01 00:00:00.000 1
108
+ 1 2003-12-01 00:00:00.001 2
109
+ 2 2003-12-01 00:00:00.002 3
110
+
111
+ """
112
+ if not isinstance(symbol_name, (str, _Operation)):
113
+ raise ValueError("Unsupported symbol_name argument value type")
114
+
115
+ self.sink(otq.ModifySymbolName(symbol_name=ott.value2str(symbol_name)))
116
+
117
+ return self