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,93 @@
1
+ from onetick.py.otq import otq
2
+ from onetick.py import state
3
+ from onetick.py.core._internal._op_utils.is_const import is_const
4
+
5
+ from onetick.py.core.column_operations.base import _Operation
6
+ from onetick.py.core._internal._state_objects import _StateColumn, _StateBase, _TickSequence
7
+ from onetick.py.types import type2str, value2str
8
+
9
+
10
+ class StateVars:
11
+ def __init__(self, owner, previous=None):
12
+ """ Class for organizing state variables
13
+
14
+ Parameters
15
+ ----------
16
+ owner: _Source
17
+ Owner of the object
18
+ previous: collections of dict of _Source, optional
19
+ Dictionaries to copy state variables from
20
+ """
21
+ self._owner = owner
22
+ self._columns = {}
23
+ previous = previous if isinstance(previous, (list, tuple)) else (previous,)
24
+ for p in previous:
25
+ if p:
26
+ for name, column in p.state_vars.items:
27
+ value = column
28
+ if isinstance(value, _StateBase):
29
+ value = value.copy(obj_ref=self, name=name)
30
+ self._columns[name] = value
31
+
32
+ def __contains__(self, item):
33
+ return item in self._columns
34
+
35
+ def __getitem__(self, item):
36
+ return self._columns[item]
37
+
38
+ def __setitem__(self, key, value):
39
+ if isinstance(value, _Operation):
40
+ value = self._set_var_from_operation(key, value)
41
+ elif isinstance(value, _StateBase):
42
+ value = value.copy(obj_ref=self, name=key)
43
+ elif key not in self._columns:
44
+ value = state.var(value).copy(obj_ref=self, name=key)
45
+
46
+ if key in self._columns:
47
+ self._owner._update_field(self._columns[key], value)
48
+ else:
49
+ self._declare_new_var(key, value)
50
+ self._columns[key] = value
51
+
52
+ def _set_var_from_operation(self, key, value):
53
+ if isinstance(value, _StateColumn):
54
+ assert not value.obj_ref, "You can't set state variable of one Source to another"
55
+ value.obj_ref = self._owner
56
+ value.name = key
57
+ else:
58
+ if not is_const(value):
59
+ assert (key in self._columns), "OneTick supports state variables creation with constants only"
60
+ else:
61
+ value = state.var(value).copy(obj_ref=self, name=key)
62
+ return value
63
+
64
+ @property
65
+ def items(self):
66
+ return tuple(self._columns.items()) # prevent mutation
67
+
68
+ @property
69
+ def names(self):
70
+ return tuple(self._columns.keys())
71
+
72
+ def _declare_new_var(self, name, value):
73
+ # obj_ref is None means that we need to declare it
74
+ base_type = value.dtype
75
+ str_type = ""
76
+
77
+ if isinstance(value, _TickSequence):
78
+ # TODO: maybe create definition() for _StateColumn too and move this logic there
79
+ str_type = value._definition()
80
+ else:
81
+ str_type = type2str(base_type)
82
+
83
+ expression = f'{str_type} {name}'
84
+
85
+ import onetick.py as otp
86
+ if value.default_value is not None:
87
+ if isinstance(value.default_value, otp.Source):
88
+ value_expression = otp.eval(value.default_value).to_eval_string(self._owner._tmp_otq)
89
+ else:
90
+ # TODO: PY-952: use to_eval_string(self._owner._tmp_otq) here if otp.eval is passed
91
+ value_expression = value2str(value.default_value)
92
+ expression += f' = {value_expression}'
93
+ self._owner.sink(otq.DeclareStateVariables(variables=expression, scope=value.scope))
File without changes
@@ -0,0 +1,95 @@
1
+ import onetick.py as otp
2
+ import onetick.py.types as ott
3
+ from onetick.py.core.column import _Column
4
+ from onetick.py.core.column_operations.base import _Operation
5
+
6
+
7
+ class _SymbolParamColumn(_Column):
8
+ """
9
+ Internal object representing OneTick's symbol parameters.
10
+ Can be used in other onetick.py methods to specify if object is symbol parameter.
11
+ """
12
+
13
+ def __init__(self, *args, default=None, **kwargs):
14
+ super().__init__(*args, **kwargs)
15
+ self._default = default
16
+
17
+ def __str__(self):
18
+ result = super().__str__()
19
+
20
+ # TODO: PY-35
21
+ # This is ad-hoc check, really we need to change column formatting to
22
+ # pre- and post-formats, and copy columns through the .copy() method
23
+ # on the _Column instead of copying them manually in different places
24
+ # of the _Source class
25
+ if self.name != '_SYMBOL_NAME':
26
+ result = f'_SYMBOL_PARAM.{self.name}'
27
+
28
+ if self._default is not None:
29
+ default_formatted = ott.value2str(self._default)
30
+ default_formatted = f'TOSTRING({default_formatted})'
31
+ result = f'CASE(UNDEFINED("{result}"), false, {result}, {default_formatted})'
32
+
33
+ # symbol params are always string, need to convert
34
+ result = _Operation(op_str=result, dtype=str)
35
+
36
+ if self.dtype is ott.nsectime:
37
+ result = result.str.to_datetime(unit='ns')
38
+ elif self.dtype is ott.msectime:
39
+ result = result.str.to_datetime(unit='ms')
40
+ else:
41
+ result = result.astype(self.dtype)
42
+
43
+ return str(result)
44
+
45
+
46
+ class _SymbolParamSource:
47
+ """
48
+ Internal container that provides access to symbol parameters.
49
+ The object is read-only, you can only get symbol parameters with it.
50
+ """
51
+
52
+ def __init__(self, **columns):
53
+
54
+ if 'name' in columns:
55
+ raise ValueError(
56
+ 'name field is a specific field for accessing _SYMBOL_NAME variable, please rename your parameter'
57
+ )
58
+
59
+ # "SYMBOL_NAME" field won't be propagated as a symbol parameter by onetick, so we should remove it here
60
+ columns.pop('SYMBOL_NAME', None)
61
+
62
+ for key, dtype in columns.items():
63
+ # TODO: change to immutable Column, PY-35
64
+ self.__dict__[key] = _SymbolParamColumn(key, dtype, self)
65
+
66
+ self.__dict__['name'] = _SymbolParamColumn('_SYMBOL_NAME', str, self)
67
+ self.__dict__['_SYMBOL_NAME'] = self.__dict__['name']
68
+
69
+ # set schema
70
+ schema = columns.copy()
71
+
72
+ for meta_c in otp.meta_fields.get_onetick_fields_and_types():
73
+ schema.pop(meta_c, None)
74
+
75
+ self.__dict__['_schema'] = schema
76
+
77
+ @property
78
+ def schema(self):
79
+ """
80
+ Represents actual python data schema in the column name -> type format.
81
+ """
82
+ return self._schema
83
+
84
+ def __getitem__(self, key):
85
+ """
86
+ Get symbol parameter with corresponding ``key``.
87
+ Raises an error if such column does not exist.
88
+ """
89
+ if key not in self.__dict__:
90
+ raise AttributeError(f"There is no '{key}' column")
91
+
92
+ return self.__dict__[key]
93
+
94
+ def __setattr__(self, key, value):
95
+ raise NotImplementedError('Symbol params are read only')
@@ -0,0 +1,97 @@
1
+ from typing import Dict
2
+ import collections.abc
3
+
4
+
5
+ class Schema(collections.abc.Mapping):
6
+ """
7
+ A source data schema proxy. It allows to work with source schema in
8
+ a frozen-dict manner. It also allows to set using the ``set``
9
+ and update a source schema using the ``update`` methods.
10
+ """
11
+
12
+ dict_cls = dict
13
+
14
+ def __init__(self, _base_source=None, _hidden_columns=None, **kwargs):
15
+ self._dict = self.dict_cls(**kwargs)
16
+ self._base_source = _base_source
17
+ self._hash = None
18
+ self._hidden_columns = _hidden_columns if _hidden_columns else {}
19
+
20
+ def __getitem__(self, item):
21
+ if isinstance(item, list):
22
+ return {key: value for key, value in self._dict.items()
23
+ if key in item}
24
+
25
+ if item in self._hidden_columns:
26
+ return self._hidden_columns[item]
27
+
28
+ return self._dict[item]
29
+
30
+ def __setitem__(self, key, value):
31
+ self.update(**{key: value})
32
+
33
+ def __contains__(self, item):
34
+ if item in self._hidden_columns:
35
+ return True
36
+
37
+ return item in self._dict
38
+
39
+ def __iter__(self):
40
+ return iter(self._dict)
41
+
42
+ def items(self):
43
+ return self._dict.items()
44
+
45
+ def keys(self):
46
+ return self._dict.keys()
47
+
48
+ def copy(self):
49
+ return self._dict.copy()
50
+
51
+ def set(self, **new_schema: type):
52
+ """
53
+ Drops the python schema representation of a source and sets the new one from the `new_schema`
54
+
55
+ Parameters
56
+ ----------
57
+ new_schema: Dict[str, type]
58
+ schema in the column-name -> type format
59
+
60
+ Returns
61
+ -------
62
+ None
63
+ """
64
+ self._base_source.set_schema(**new_schema)
65
+
66
+ def update(self, **other_schema: type):
67
+ """
68
+ Updates the python schema representation of a source: values from matching keys
69
+ will be overridden from the `other_schema`, values from new keys will be added.
70
+
71
+ Parameters
72
+ ----------
73
+ other_schema:
74
+ schema in the column-name -> type format
75
+
76
+ Returns
77
+ -------
78
+ None
79
+ """
80
+ current_schema = self._base_source.columns(skip_meta_fields=True)
81
+ current_schema.update(other_schema)
82
+
83
+ self._base_source.set_schema(**current_schema)
84
+
85
+ def __len__(self):
86
+ return len(self._dict)
87
+
88
+ def __repr__(self):
89
+ return repr(self._dict)
90
+
91
+ def __hash__(self):
92
+ if self._hash is None:
93
+ h = 0
94
+ for key, value in self._dict.items():
95
+ h ^= hash((key, value))
96
+ self._hash = h
97
+ return self._hash
File without changes