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.
- locator_parser/__init__.py +0 -0
- locator_parser/acl.py +73 -0
- locator_parser/actions.py +262 -0
- locator_parser/common.py +368 -0
- locator_parser/io.py +43 -0
- locator_parser/locator.py +150 -0
- onetick/__init__.py +101 -0
- onetick/doc_utilities/__init__.py +3 -0
- onetick/doc_utilities/napoleon.py +40 -0
- onetick/doc_utilities/ot_doctest.py +140 -0
- onetick/doc_utilities/snippets.py +279 -0
- onetick/lib/__init__.py +4 -0
- onetick/lib/instance.py +141 -0
- onetick/py/__init__.py +293 -0
- onetick/py/_stack_info.py +89 -0
- onetick/py/_version.py +2 -0
- onetick/py/aggregations/__init__.py +11 -0
- onetick/py/aggregations/_base.py +648 -0
- onetick/py/aggregations/_docs.py +948 -0
- onetick/py/aggregations/compute.py +286 -0
- onetick/py/aggregations/functions.py +2216 -0
- onetick/py/aggregations/generic.py +104 -0
- onetick/py/aggregations/high_low.py +80 -0
- onetick/py/aggregations/num_distinct.py +83 -0
- onetick/py/aggregations/order_book.py +501 -0
- onetick/py/aggregations/other.py +1014 -0
- onetick/py/backports.py +26 -0
- onetick/py/cache.py +374 -0
- onetick/py/callback/__init__.py +5 -0
- onetick/py/callback/callback.py +276 -0
- onetick/py/callback/callbacks.py +131 -0
- onetick/py/compatibility.py +798 -0
- onetick/py/configuration.py +771 -0
- onetick/py/core/__init__.py +0 -0
- onetick/py/core/_csv_inspector.py +93 -0
- onetick/py/core/_internal/__init__.py +0 -0
- onetick/py/core/_internal/_manually_bound_value.py +6 -0
- onetick/py/core/_internal/_nodes_history.py +250 -0
- onetick/py/core/_internal/_op_utils/__init__.py +0 -0
- onetick/py/core/_internal/_op_utils/every_operand.py +9 -0
- onetick/py/core/_internal/_op_utils/is_const.py +10 -0
- onetick/py/core/_internal/_per_tick_scripts/tick_list_sort_template.script +121 -0
- onetick/py/core/_internal/_proxy_node.py +140 -0
- onetick/py/core/_internal/_state_objects.py +2312 -0
- onetick/py/core/_internal/_state_vars.py +93 -0
- onetick/py/core/_source/__init__.py +0 -0
- onetick/py/core/_source/_symbol_param.py +95 -0
- onetick/py/core/_source/schema.py +97 -0
- onetick/py/core/_source/source_methods/__init__.py +0 -0
- onetick/py/core/_source/source_methods/aggregations.py +809 -0
- onetick/py/core/_source/source_methods/applyers.py +296 -0
- onetick/py/core/_source/source_methods/columns.py +141 -0
- onetick/py/core/_source/source_methods/data_quality.py +301 -0
- onetick/py/core/_source/source_methods/debugs.py +272 -0
- onetick/py/core/_source/source_methods/drops.py +120 -0
- onetick/py/core/_source/source_methods/fields.py +619 -0
- onetick/py/core/_source/source_methods/filters.py +1002 -0
- onetick/py/core/_source/source_methods/joins.py +1413 -0
- onetick/py/core/_source/source_methods/merges.py +605 -0
- onetick/py/core/_source/source_methods/misc.py +1455 -0
- onetick/py/core/_source/source_methods/pandases.py +155 -0
- onetick/py/core/_source/source_methods/renames.py +356 -0
- onetick/py/core/_source/source_methods/sorts.py +183 -0
- onetick/py/core/_source/source_methods/switches.py +142 -0
- onetick/py/core/_source/source_methods/symbols.py +117 -0
- onetick/py/core/_source/source_methods/times.py +627 -0
- onetick/py/core/_source/source_methods/writes.py +986 -0
- onetick/py/core/_source/symbol.py +205 -0
- onetick/py/core/_source/tmp_otq.py +222 -0
- onetick/py/core/column.py +209 -0
- onetick/py/core/column_operations/__init__.py +0 -0
- onetick/py/core/column_operations/_methods/__init__.py +4 -0
- onetick/py/core/column_operations/_methods/_internal.py +28 -0
- onetick/py/core/column_operations/_methods/conversions.py +216 -0
- onetick/py/core/column_operations/_methods/methods.py +292 -0
- onetick/py/core/column_operations/_methods/op_types.py +160 -0
- onetick/py/core/column_operations/accessors/__init__.py +0 -0
- onetick/py/core/column_operations/accessors/_accessor.py +28 -0
- onetick/py/core/column_operations/accessors/decimal_accessor.py +104 -0
- onetick/py/core/column_operations/accessors/dt_accessor.py +537 -0
- onetick/py/core/column_operations/accessors/float_accessor.py +184 -0
- onetick/py/core/column_operations/accessors/str_accessor.py +1367 -0
- onetick/py/core/column_operations/base.py +1121 -0
- onetick/py/core/cut_builder.py +150 -0
- onetick/py/core/db_constants.py +20 -0
- onetick/py/core/eval_query.py +245 -0
- onetick/py/core/lambda_object.py +441 -0
- onetick/py/core/multi_output_source.py +232 -0
- onetick/py/core/per_tick_script.py +2256 -0
- onetick/py/core/query_inspector.py +464 -0
- onetick/py/core/source.py +1744 -0
- onetick/py/db/__init__.py +2 -0
- onetick/py/db/_inspection.py +1128 -0
- onetick/py/db/db.py +1327 -0
- onetick/py/db/utils.py +64 -0
- onetick/py/docs/__init__.py +0 -0
- onetick/py/docs/docstring_parser.py +112 -0
- onetick/py/docs/utils.py +81 -0
- onetick/py/functions.py +2398 -0
- onetick/py/license.py +190 -0
- onetick/py/log.py +88 -0
- onetick/py/math.py +935 -0
- onetick/py/misc.py +470 -0
- onetick/py/oqd/__init__.py +22 -0
- onetick/py/oqd/eps.py +1195 -0
- onetick/py/oqd/sources.py +325 -0
- onetick/py/otq.py +216 -0
- onetick/py/pyomd_mock.py +47 -0
- onetick/py/run.py +916 -0
- onetick/py/servers.py +173 -0
- onetick/py/session.py +1347 -0
- onetick/py/sources/__init__.py +19 -0
- onetick/py/sources/cache.py +167 -0
- onetick/py/sources/common.py +128 -0
- onetick/py/sources/csv.py +642 -0
- onetick/py/sources/custom.py +85 -0
- onetick/py/sources/data_file.py +305 -0
- onetick/py/sources/data_source.py +1045 -0
- onetick/py/sources/empty.py +94 -0
- onetick/py/sources/odbc.py +337 -0
- onetick/py/sources/order_book.py +271 -0
- onetick/py/sources/parquet.py +168 -0
- onetick/py/sources/pit.py +191 -0
- onetick/py/sources/query.py +495 -0
- onetick/py/sources/snapshots.py +419 -0
- onetick/py/sources/split_query_output_by_symbol.py +198 -0
- onetick/py/sources/symbology_mapping.py +123 -0
- onetick/py/sources/symbols.py +374 -0
- onetick/py/sources/ticks.py +825 -0
- onetick/py/sql.py +70 -0
- onetick/py/state.py +251 -0
- onetick/py/types.py +2131 -0
- onetick/py/utils/__init__.py +70 -0
- onetick/py/utils/acl.py +93 -0
- onetick/py/utils/config.py +186 -0
- onetick/py/utils/default.py +49 -0
- onetick/py/utils/file.py +38 -0
- onetick/py/utils/helpers.py +76 -0
- onetick/py/utils/locator.py +94 -0
- onetick/py/utils/perf.py +498 -0
- onetick/py/utils/query.py +49 -0
- onetick/py/utils/render.py +1374 -0
- onetick/py/utils/script.py +244 -0
- onetick/py/utils/temp.py +471 -0
- onetick/py/utils/types.py +120 -0
- onetick/py/utils/tz.py +84 -0
- onetick_py-1.177.0.dist-info/METADATA +137 -0
- onetick_py-1.177.0.dist-info/RECORD +152 -0
- onetick_py-1.177.0.dist-info/WHEEL +5 -0
- onetick_py-1.177.0.dist-info/entry_points.txt +2 -0
- onetick_py-1.177.0.dist-info/licenses/LICENSE +21 -0
- onetick_py-1.177.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
|
|
5
|
+
from onetick.py.backports import cached_property
|
|
6
|
+
from onetick.py import utils
|
|
7
|
+
from . import CallbackBase
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class LogCallback(CallbackBase):
|
|
11
|
+
def __init__(self, query_name):
|
|
12
|
+
print(f'Running query {query_name}')
|
|
13
|
+
super().__init__()
|
|
14
|
+
|
|
15
|
+
def process_symbol_name(self, symbol_name):
|
|
16
|
+
print(f'Processing symbol {symbol_name}')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ManualDataframeCallback(CallbackBase):
|
|
20
|
+
"""
|
|
21
|
+
This callback class can be used to generate the same :pandas:`pandas.DataFrame` result as in otp.run.
|
|
22
|
+
Unlike otp.run, here result is constructed manually, one tick at a time.
|
|
23
|
+
This may lead to lower memory usage in some cases.
|
|
24
|
+
See task PY-863 for details.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, timezone, callback_objects=None):
|
|
28
|
+
# getting timezone from user as string or from replicating as object
|
|
29
|
+
self._timezone = utils.tz.get_tzfile_by_name(timezone) if isinstance(timezone, str) else timezone
|
|
30
|
+
# list of all ManualDataframeCallback objects, passed when replicating
|
|
31
|
+
self._callback_objects = [] if callback_objects is None else callback_objects
|
|
32
|
+
self._callback_objects.append(self)
|
|
33
|
+
# ManualDataframeCallback is replicated for each symbol
|
|
34
|
+
self._symbol_name = None
|
|
35
|
+
# dict of columns names and lists with their values
|
|
36
|
+
self._columns = None
|
|
37
|
+
self._defaults = None
|
|
38
|
+
self._result = None
|
|
39
|
+
|
|
40
|
+
def replicate(self):
|
|
41
|
+
"""
|
|
42
|
+
Object is replicated for each symbol.
|
|
43
|
+
Passing timezone and list to save all objects to aggregate them in the end.
|
|
44
|
+
"""
|
|
45
|
+
return ManualDataframeCallback(self._timezone, callback_objects=self._callback_objects)
|
|
46
|
+
|
|
47
|
+
def process_symbol_name(self, symbol_name):
|
|
48
|
+
"""
|
|
49
|
+
Called once for each ManualDataframeCallback object
|
|
50
|
+
"""
|
|
51
|
+
self._symbol_name = symbol_name
|
|
52
|
+
|
|
53
|
+
def process_tick_descriptor(self, tick_descriptor):
|
|
54
|
+
"""
|
|
55
|
+
Called for each change of schema.
|
|
56
|
+
For example, different dates in database may have different schemas.
|
|
57
|
+
In this case we are merging them together.
|
|
58
|
+
"""
|
|
59
|
+
if self._columns is None:
|
|
60
|
+
self._columns = {'Time': []}
|
|
61
|
+
self._defaults = {}
|
|
62
|
+
for name, type_dict in tick_descriptor:
|
|
63
|
+
if name not in self._columns:
|
|
64
|
+
dtype_str = type_dict['type']
|
|
65
|
+
default = self._get_default_value_by_type(dtype_str)
|
|
66
|
+
# save default value for column, will be used in other places
|
|
67
|
+
self._defaults[name] = default
|
|
68
|
+
# update previous ticks with default value of the new field
|
|
69
|
+
self._columns[name] = [default] * len(self._columns['Time'])
|
|
70
|
+
|
|
71
|
+
def process_tick(self, tick, time):
|
|
72
|
+
"""
|
|
73
|
+
Called for each tick of the symbol.
|
|
74
|
+
"""
|
|
75
|
+
assert self._columns is not None
|
|
76
|
+
for name in self._columns:
|
|
77
|
+
if name == 'Time':
|
|
78
|
+
value = self._convert_to_timezone(time)
|
|
79
|
+
elif name not in tick:
|
|
80
|
+
value = self._defaults[name]
|
|
81
|
+
else:
|
|
82
|
+
value = tick[name]
|
|
83
|
+
if isinstance(value, datetime.datetime):
|
|
84
|
+
# datetime values are always in UTC
|
|
85
|
+
value = self._convert_to_timezone(value)
|
|
86
|
+
self._columns[name].append(value)
|
|
87
|
+
|
|
88
|
+
def done(self):
|
|
89
|
+
"""
|
|
90
|
+
Called once for each symbol after all ticks are processed.
|
|
91
|
+
"""
|
|
92
|
+
self._result = pd.DataFrame(self._columns)
|
|
93
|
+
|
|
94
|
+
@cached_property
|
|
95
|
+
def result(self):
|
|
96
|
+
"""
|
|
97
|
+
Must be called by the user after callback object is used in otp.run.
|
|
98
|
+
Aggregating results from all ManualDataframeCallback objects
|
|
99
|
+
and returning pandas dataframe or dict of such (same as result of otp.run in 'df' output mode).
|
|
100
|
+
"""
|
|
101
|
+
results = {
|
|
102
|
+
callback_object._symbol_name: callback_object._result
|
|
103
|
+
for callback_object in self._callback_objects
|
|
104
|
+
if callback_object._result is not None
|
|
105
|
+
}
|
|
106
|
+
# if we have only one symbol, return dataframe, not dict
|
|
107
|
+
if len(results) == 1:
|
|
108
|
+
return results.popitem()[1]
|
|
109
|
+
return results
|
|
110
|
+
|
|
111
|
+
def _convert_to_timezone(self, dt):
|
|
112
|
+
"""
|
|
113
|
+
Converting timezone-naive ``dt`` object in UTC timezone
|
|
114
|
+
to the timezone specified by user and returning also timezone-naive object.
|
|
115
|
+
"""
|
|
116
|
+
return utils.convert_timezone(dt, 'UTC', self._timezone)
|
|
117
|
+
|
|
118
|
+
def _get_default_value_by_type(self, dtype_str):
|
|
119
|
+
"""
|
|
120
|
+
Converting type names returned by process_tick_descriptor()
|
|
121
|
+
"""
|
|
122
|
+
defaults = {
|
|
123
|
+
'int': 0,
|
|
124
|
+
'float': 0.0,
|
|
125
|
+
'string': '',
|
|
126
|
+
'datetime': self._convert_to_timezone(
|
|
127
|
+
# epoch in timezone specified by user converted to UTC, that's what OneTick would return
|
|
128
|
+
pd.Timestamp(1970, 1, 1).tz_localize(self._timezone).tz_convert('UTC').tz_localize(None)
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
return defaults[dtype_str]
|