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,19 @@
1
+ from onetick.py.core.source import Source, _Source # _Source for backward compatibility
2
+
3
+ from .ticks import Tick, Ticks, TTicks
4
+ from .data_source import DataSource, Custom
5
+
6
+ from .cache import ReadCache
7
+ from .csv import CSV, LocalCSVTicks
8
+ from .data_file import DataFile
9
+ from .empty import Empty
10
+ from .custom import Orders, Quotes, Trades, NBBO
11
+ from .order_book import ObSnapshot, ObSnapshotFlat, ObSnapshotWide, ObSummary, ObSize, ObVwap, ObNumLevels
12
+ from .odbc import ODBC
13
+ from .parquet import ReadParquet
14
+ from .query import query, Query
15
+ from .snapshots import ReadSnapshot, ShowSnapshotList, FindSnapshotSymbols
16
+ from .split_query_output_by_symbol import SplitQueryOutputBySymbol, by_symbol
17
+ from .symbology_mapping import SymbologyMapping
18
+ from .symbols import Symbols
19
+ from .pit import PointInTime
@@ -0,0 +1,167 @@
1
+ from typing import Union
2
+
3
+ import onetick.py as otp
4
+ from onetick.py.otq import otq
5
+
6
+ from onetick.py.core.source import Source
7
+
8
+ from .. import types as ott
9
+ from .. import utils
10
+
11
+ from .common import update_node_tick_type
12
+
13
+
14
+ def process_otq_params(params: Union[dict, None]) -> str:
15
+ if not params:
16
+ return ""
17
+
18
+ return ",".join([f"{k}={ott.value2str(v)}" for k, v in params.items()])
19
+
20
+
21
+ class ReadCache(Source):
22
+ def __init__(
23
+ self,
24
+ cache_name=None,
25
+ db=utils.adaptive_to_default,
26
+ symbol=utils.adaptive,
27
+ tick_type=utils.adaptive,
28
+ start=utils.adaptive,
29
+ end=utils.adaptive,
30
+ read_mode="automatic",
31
+ update_cache=True,
32
+ otq_params=None,
33
+ create_cache_query="",
34
+ schema=None,
35
+ **kwargs,
36
+ ):
37
+ """
38
+ Make cached query
39
+
40
+ Cache is initialized on the first read attempt.
41
+
42
+ Parameters
43
+ ----------
44
+ cache_name: str
45
+ Name of cache for a query.
46
+ symbol: str, list of str, :class:`Source`, :class:`query`, :py:func:`eval query <onetick.py.eval>`
47
+ Symbol(s) from which data should be taken.
48
+ db: str
49
+ Database to use for tick generation.
50
+ tick_type: str
51
+ Tick type.
52
+ Default: ANY.
53
+ start: :py:class:`otp.datetime <onetick.py.datetime>`
54
+ Start time for tick generation. By default the start time of the query will be used.
55
+ end: :py:class:`otp.datetime <onetick.py.datetime>`
56
+ End time for tick generation. By default the end time of the query will be used.
57
+ read_mode: str
58
+ Mode of querying cache. One of these:
59
+
60
+ * ``cache_only`` - only cached results are returned and queries are not performed.
61
+ * ``query_only`` - the query is run irrespective of whether the result is already available in the cache.
62
+ * ``automatic`` (default) - perform the query if the data is not found in the cache.
63
+ update_cache: bool
64
+ If set to ``True``, updates the cached data if ``read_mode=query_only`` or if ``read_mode=automatic`` and
65
+ the result data not found in the cache. Otherwise, the cache remains unchanged.
66
+ otq_params: dict
67
+ OTQ parameters to override ``otq_params`` that are passed during creation of cache.
68
+ Query result will be cached separately for each unique pair of OTQ parameters.
69
+ create_cache_query: str
70
+ If a cache with the given name is not present, the query provided in this param will be invoked,
71
+ which should contain CREATE_CACHE EP to create the corresponding cache.
72
+ schema: Optional, dict
73
+ Dictionary of columns names with their types.
74
+ kwargs:
75
+ Deprecated. Use ``schema`` instead.
76
+ Dictionary of columns names with their types.
77
+
78
+ See also
79
+ --------
80
+ | **READ_CACHE** OneTick event processor
81
+ | :py:func:`onetick.py.create_cache`
82
+
83
+ Examples
84
+ --------
85
+ Simple cache read:
86
+
87
+ >>> def query_func():
88
+ ... return otp.DataSource("DEMO_L1", tick_type="TRD", symbols="AAPL")
89
+ >>> otp.create_cache(
90
+ ... cache_name="some_cache", query=query_func, tick_type="TRD", db="DEMO_L1",
91
+ ... )
92
+ >>> src = otp.ReadCache("some_cache")
93
+ >>> otp.run(src) # doctest: +SKIP
94
+
95
+ Make cache query for specific time interval:
96
+
97
+ >>> src = otp.ReadCache(
98
+ ... "some_cache",
99
+ ... start=otp.datetime(2024, 1, 1, 12, 30),
100
+ ... end=otp.datetime(2024, 1, 2, 18, 0),
101
+ ... )
102
+ >>> otp.run(src) # doctest: +SKIP
103
+
104
+ Override or set `otq_params` for one query:
105
+
106
+ >>> src = otp.ReadCache(
107
+ ... "some_cache",
108
+ ... otq_params={"some_param": "test_value"},
109
+ ... )
110
+ >>> otp.run(src) # doctest: +SKIP
111
+ """
112
+ if self._try_default_constructor(schema=schema, **kwargs):
113
+ return
114
+
115
+ if cache_name is None:
116
+ raise ValueError("Missing required parameter `cache_name`")
117
+
118
+ if read_mode not in {"automatic", "cache_only", "query_only"}:
119
+ raise ValueError(f"Incorrect value of `read_mode` parameter passed: {read_mode}")
120
+
121
+ if update_cache and read_mode == 'cache_only':
122
+ raise ValueError("`update_cache` parameter couldn't be set to True with `read_mode` set to cache_only")
123
+
124
+ read_mode = read_mode.upper()
125
+
126
+ otq_params = process_otq_params(otq_params)
127
+
128
+ super().__init__(
129
+ _symbols=symbol,
130
+ _start=start,
131
+ _end=end,
132
+ _base_ep_func=lambda: self.base_ep(
133
+ db=db,
134
+ tick_type=tick_type,
135
+ cache_name=cache_name,
136
+ read_mode=read_mode,
137
+ update_cache=update_cache,
138
+ otq_params=otq_params,
139
+ create_cache_query=create_cache_query,
140
+ ),
141
+ schema=schema,
142
+ **kwargs,
143
+ )
144
+
145
+ def base_ep(
146
+ self,
147
+ db=utils.adaptive_to_default,
148
+ tick_type=utils.adaptive,
149
+ cache_name=None,
150
+ read_mode="automatic",
151
+ update_cache=True,
152
+ otq_params="",
153
+ create_cache_query="",
154
+ ):
155
+ src = Source(
156
+ otq.ReadCache(
157
+ cache_name=cache_name,
158
+ per_cache_otq_params=otq_params,
159
+ read_mode=read_mode,
160
+ update_cache=update_cache,
161
+ create_cache_query=create_cache_query,
162
+ )
163
+ )
164
+
165
+ update_node_tick_type(src, tick_type, db)
166
+
167
+ return src
@@ -0,0 +1,128 @@
1
+ import datetime as dt
2
+
3
+ from typing import Optional, Union, Type, List
4
+
5
+ from onetick.py.otq import otq
6
+ import pandas as pd
7
+
8
+ from onetick.py.core._source._symbol_param import _SymbolParamColumn
9
+ from onetick.py.core.source import Source
10
+ from onetick.py.core.column_operations.base import OnetickParameter
11
+
12
+ from .. import types as ott
13
+ from .. import utils, configuration
14
+
15
+ AdaptiveTickType = Union[str, OnetickParameter, _SymbolParamColumn, Type[utils.adaptive]]
16
+ AdaptiveDBType = Union[str, OnetickParameter, _SymbolParamColumn, Type[utils.adaptive], List[str]]
17
+
18
+
19
+ def get_start_end_by_date(date):
20
+ if isinstance(date, (ott.datetime, ott.date)):
21
+ start = date.start
22
+ end = date.end
23
+ elif isinstance(date, (dt.datetime, dt.date)):
24
+ start = dt.datetime(date.year, date.month, date.day)
25
+ end = start + dt.timedelta(days=1, milliseconds=-1)
26
+ else:
27
+ raise ValueError(f"Unsupported value of parameter 'date': {type(date)}")
28
+ return start, end
29
+
30
+
31
+ def convert_tick_type_to_str(
32
+ tick_type: Optional[AdaptiveTickType],
33
+ db: Optional[AdaptiveDBType] = None,
34
+ ) -> Optional[str]:
35
+ if not isinstance(db, list) and not isinstance(db, (OnetickParameter, _SymbolParamColumn)):
36
+ if tick_type is utils.adaptive:
37
+ tick_type = 'ANY'
38
+
39
+ if isinstance(tick_type, type) or tick_type is None:
40
+ return None
41
+
42
+ if db is utils.adaptive_to_default or db is utils.adaptive:
43
+ # if default database is not set, tick type will be set without it
44
+ # and symbols will have to be specified in otp.run
45
+ db = configuration.config.get('default_db')
46
+
47
+ str_db = str(db) if db is not None else ''
48
+ str_tt = str(tick_type) if tick_type is not None else ''
49
+
50
+ is_db_symbol_param = isinstance(db, _SymbolParamColumn)
51
+ is_tt_symbol_param = isinstance(tick_type, _SymbolParamColumn)
52
+
53
+ if isinstance(db, OnetickParameter):
54
+ str_db = db.parameter_expression
55
+
56
+ if isinstance(tick_type, OnetickParameter):
57
+ str_tt = tick_type.parameter_expression
58
+
59
+ if db is None:
60
+ if is_tt_symbol_param:
61
+ return f"expr({str_tt})"
62
+ return str_tt
63
+
64
+ if isinstance(db, list):
65
+ str_db = "+".join(db)
66
+
67
+ if tick_type is not None:
68
+ if is_db_symbol_param:
69
+ if is_tt_symbol_param:
70
+ return f"expr({str_db} + '::' + {str_tt})"
71
+
72
+ return f"expr({str_db} + '::{str_tt}')"
73
+
74
+ if is_tt_symbol_param:
75
+ return f"expr('{str_db}::' + {str_tt})"
76
+ elif "::" not in str_db:
77
+ return str_db + "::" + str_tt
78
+ elif is_db_symbol_param:
79
+ return f"expr({str_db})"
80
+
81
+ return str_db
82
+
83
+
84
+ def update_node_tick_type(
85
+ src: "Source",
86
+ tick_type: Optional[AdaptiveTickType],
87
+ db: Optional[AdaptiveDBType] = None,
88
+ ):
89
+ """
90
+ Update tick type of the node of the source ``src`` according to ``db`` name and ``tick_type``.
91
+
92
+ Adaptive tick type means that tick type value doesn't affect query results
93
+ and, thus, we change it to some constant value.
94
+
95
+ Parameters
96
+ ----------
97
+ src: Source
98
+ source to set tick type on
99
+ tick_type: Optional[AdaptiveTickType]
100
+ string tick type or :py:class:`onetick.py.adaptive`
101
+ db: Optional[AdaptiveDBType]
102
+ optional db name or list of strings with db names and tick types
103
+ """
104
+
105
+ str_db = convert_tick_type_to_str(tick_type, db)
106
+ if str_db is None:
107
+ return
108
+
109
+ src.tick_type(str_db)
110
+
111
+
112
+ def _common_passthrough_base_ep(db, tick_type):
113
+ src = Source(otq.Passthrough(fields="SYMBOL_NAME,TICK_TYPE", drop_fields=True))
114
+ update_node_tick_type(src, tick_type, db)
115
+ return src
116
+
117
+
118
+ def default_date_converter(date):
119
+ return pd.to_datetime(date, format='%Y%m%d%H%M%S.%f')
120
+
121
+
122
+ def to_timestamp_nanos(date, date_converter, tz):
123
+ date = date_converter(date)
124
+ if isinstance(date, ott.dt):
125
+ date = date.ts
126
+ else:
127
+ date = pd.to_datetime(date)
128
+ return date.tz_localize(tz)