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,279 @@
1
+ import os
2
+ import argparse
3
+ import doctest
4
+ import pkgutil
5
+ import json
6
+ from collections import defaultdict
7
+ from typing import List, Optional
8
+ from jupyter_core.paths import jupyter_data_dir, jupyter_config_dir
9
+ import onetick.py as otp
10
+ from onetick.doc_utilities.ot_doctest import OTDoctestParser
11
+
12
+
13
+ def parse_args():
14
+ parser = argparse.ArgumentParser(description='Adding snippets configuration from onetick-py package')
15
+ parser.add_argument('extension',
16
+ choices=['snippets', 'snippets_menu', 'jupyterlab_snippets'],
17
+ default='snippets', nargs='?',
18
+ help='adding configuration to selected extension')
19
+ parser.add_argument('-i', '--names-info', action='store_true',
20
+ help='show snippet names as yaml "tree"')
21
+ args = parser.parse_args()
22
+ return args
23
+
24
+
25
+ def collect_examples_from_obj(obj: doctest.DocTest) -> List:
26
+ """groups examples for one object (docstring)"""
27
+ snippets = []
28
+ id_ = 1
29
+ snippet = Snippet(obj_ref=f'{obj.name} {id_}')
30
+
31
+ for example in obj.examples:
32
+ snippet.append(example)
33
+ if example.want:
34
+ snippets.append(snippet)
35
+ id_ += 1
36
+ snippet = Snippet(obj_ref=f'{obj.name} {id_}')
37
+ return snippets
38
+
39
+
40
+ def parse_string(string: str, caller: Optional[str] = None) -> str:
41
+ parser = OTDoctestParser(caller=caller)
42
+ lines = parser.parse(string)
43
+ res: List = []
44
+ snippet = Snippet()
45
+ for item in lines:
46
+ if isinstance(item, doctest.Example):
47
+ snippet.append(item)
48
+ else:
49
+ if snippet.code:
50
+ res.append(snippet)
51
+ snippet = Snippet()
52
+ res.append(item)
53
+ return ''.join(map(str, res))
54
+
55
+
56
+ class SnippetInspectionError(Exception):
57
+ pass
58
+
59
+
60
+ def inspect_modules():
61
+
62
+ """Inspect onetick.py modules and collect snippets"""
63
+
64
+ finder = doctest.DocTestFinder(parser=OTDoctestParser(caller='snippet'))
65
+ snippets = Snippets()
66
+
67
+ error_messages = []
68
+
69
+ for _, modname, _ in pkgutil.walk_packages(otp.__path__, prefix=otp.__name__ + '.'):
70
+ module = __import__(modname, fromlist=['__any__'])
71
+ for doc in finder.find(module):
72
+ for snippet in collect_examples_from_obj(doc):
73
+ try:
74
+ snippets.append(snippet)
75
+ except Exception as e:
76
+ error_messages.append(str(e))
77
+ if error_messages:
78
+ error_messages = '\t\n'.join(error_messages)
79
+ message = f"During collection of snippets following exception were raised:\n{error_messages}"
80
+ raise SnippetInspectionError(message)
81
+
82
+ return snippets
83
+
84
+
85
+ def set_snippets(content):
86
+ """Set nbextension-contrib-snippets with content"""
87
+ snippets = {'snippets': content}
88
+ path = jupyter_data_dir()
89
+ path = os.path.join(path, 'nbextensions', 'snippets', 'snippets.json')
90
+ if not os.path.exists(path):
91
+ raise FileNotFoundError('Not able to set onetick snippets. Make sure nbextension snippets was installed.'
92
+ f'File {path} not found')
93
+ with open(path, 'w') as f:
94
+ json.dump(snippets, f, indent=4, sort_keys=True)
95
+
96
+
97
+ def set_snippets_menu(content):
98
+ """Set nbextension-contrib-snippets_menu with content"""
99
+ custom_js = f'''require(["nbextensions/snippets_menu/main"], function (snippets_menu) {{
100
+ console.log('Loading `snippets_menu` customizations from `custom.js`');
101
+ var horizontal_line = '---';
102
+ var snippets = {{
103
+ 'name' : 'OneTick snippets',
104
+ 'sub-menu' : {json.dumps(content, indent=4, sort_keys=True)}
105
+ }};
106
+ snippets_menu.options['menus'].push(snippets);
107
+ console.log('Loaded `snippets_menu` customizations from `custom.js`');
108
+ }});'''
109
+ path = os.path.join(jupyter_config_dir(), 'custom', 'custom.js')
110
+ os.makedirs(os.path.dirname(path), exist_ok=True)
111
+ with open(path, 'w') as f:
112
+ f.write(custom_js)
113
+
114
+
115
+ def set_jupyterlab_snippets(content):
116
+ """Set jupyterlab-snippets with content"""
117
+
118
+ def traverse_snippets(path, node_list):
119
+ for node in node_list:
120
+ if "sub-menu" in node:
121
+ folder_path = os.path.join(path, node["name"])
122
+ os.makedirs(folder_path, exist_ok=True)
123
+ traverse_snippets(folder_path, node["sub-menu"])
124
+ elif "snippet" in node:
125
+ filename = os.path.join(path, node["name"].replace("|", " ").replace("/", " ")) + ".py"
126
+ print(filename)
127
+ with open(filename, 'w') as f:
128
+ f.write("\n".join(node["snippet"]))
129
+
130
+ snippet_path = os.path.join(jupyter_data_dir(), "snippets", "OneTick snippets")
131
+ os.makedirs(snippet_path, exist_ok=True)
132
+ traverse_snippets(snippet_path, content)
133
+
134
+
135
+ class Snippet:
136
+
137
+ """
138
+ Snippet container.
139
+ Contain code from doctest.Examples, add ability to set name.
140
+ Validate names get from doctest.Examples
141
+ """
142
+
143
+ def __init__(self,
144
+ name: Optional[str] = None,
145
+ examples: Optional[List[doctest.Example]] = None,
146
+ obj_ref: Optional[str] = None):
147
+ self._name = name
148
+ self._examples = examples or []
149
+ self._obj_ref = obj_ref
150
+ self.skip_snippet = False
151
+
152
+ @property
153
+ def name(self):
154
+ return self._name
155
+
156
+ @name.setter
157
+ def name(self, value):
158
+ if self._name:
159
+ raise ValueError(f'Two names set for one snippet in "{self._obj_ref}": {self._name}, {value}')
160
+ self._name = value
161
+
162
+ @property
163
+ def code(self) -> List[str]:
164
+ res = []
165
+ for ex in self._examples:
166
+ res.extend(ex.source.strip().split('\n'))
167
+ return res
168
+
169
+ @property
170
+ def code_raw(self) -> str:
171
+ res = []
172
+ for ex in self._examples:
173
+ for i, line in enumerate(ex.source.strip().split('\n')):
174
+ if i == 0:
175
+ res.append('>>> ' + line)
176
+ else:
177
+ res.append('... ' + line)
178
+ res.append(ex.want)
179
+ return '\n'.join(res)
180
+
181
+ def append(self, item: doctest.Example):
182
+ for attr in ['name', 'skip_snippet']:
183
+ if hasattr(item, attr):
184
+ setattr(self, attr, getattr(item, attr))
185
+ skip_example = False
186
+ if hasattr(item, 'skip'):
187
+ skip_example = getattr(item, 'skip')
188
+ if not skip_example and item.source.strip():
189
+ self._examples.append(item)
190
+
191
+ def __str__(self):
192
+ return self.code_raw
193
+
194
+
195
+ class Snippets:
196
+
197
+ """Container for Snippet's"""
198
+
199
+ def __init__(self):
200
+ self._snippets = {}
201
+
202
+ def append(self, item: Snippet):
203
+ """
204
+ Validate Snippet name;
205
+ Add Snippet to container
206
+ """
207
+ if item.skip_snippet or not item.code:
208
+ return
209
+ if not item.name:
210
+ return # skipping nameless snippets
211
+ if item.name in self._snippets:
212
+ raise ValueError('Snippet name is not unique. '
213
+ f'Objects "{self._snippets[item.name]._obj_ref}", "{item._obj_ref}"')
214
+ self._snippets[item.name] = item
215
+
216
+ def extend(self, items: List):
217
+ for item in items:
218
+ self.append(item)
219
+
220
+ def __iter__(self):
221
+ yield from self._snippets.values()
222
+
223
+ def dict_view(self):
224
+ """Format snippets for nbextension-contrib-snippets"""
225
+ return {"snippets": [{"name": s.name, "code": s.code} for s in self]}
226
+
227
+ def menu_view(self):
228
+ """Format snippets for nbextension-contrib-snippets_menu"""
229
+
230
+ def tree():
231
+ return defaultdict(tree)
232
+
233
+ def set(t, keys: List, value):
234
+ tmp = t
235
+ for key in keys[:-1]:
236
+ tmp = tmp[key]
237
+ tmp[keys[-1]] = value
238
+
239
+ def walk(t):
240
+ res = []
241
+ names = []
242
+ for key in t.keys():
243
+ if not isinstance(t[key], defaultdict):
244
+ res.append({"name": key, "snippet": t[key].code})
245
+ names.append(key)
246
+ else:
247
+ code, name = walk(t[key])
248
+ res.append({"name": key, "sub-menu": code})
249
+ names.append({key: name})
250
+ return res, names
251
+
252
+ res = tree()
253
+
254
+ for v in self:
255
+ names = v.name.split('.')
256
+ set(res, names, v)
257
+ return walk(res)
258
+
259
+
260
+ def main():
261
+ args = parse_args()
262
+ snippets = inspect_modules()
263
+ if args.names_info:
264
+ import yaml
265
+ _, menu = snippets.menu_view()
266
+ print(yaml.dump(menu))
267
+ else:
268
+ if args.extension == 'snippets':
269
+ set_snippets(snippets.dict_view())
270
+ elif args.extension == 'snippets_menu':
271
+ s, _ = snippets.menu_view()
272
+ set_snippets_menu(s)
273
+ elif args.extension == 'jupyterlab_snippets':
274
+ s, _ = snippets.menu_view()
275
+ set_jupyterlab_snippets(s)
276
+
277
+
278
+ if __name__ == '__main__':
279
+ main()
@@ -0,0 +1,4 @@
1
+ __version__ = '1.0.11'
2
+
3
+ from onetick.lib.instance import OneTickLib
4
+ from onetick.lib.instance import LoggingLevel
@@ -0,0 +1,141 @@
1
+ # mypy: disable-error-code="attr-defined"
2
+
3
+ import os
4
+ import gc
5
+ import inspect
6
+ from enum import Enum
7
+
8
+ if os.getenv('OTP_WEBAPI', default='').lower() not in ('0', 'false', 'no', ''):
9
+ import onetick.query_webapi as otq
10
+
11
+ class OneTickLibMock:
12
+ LOGGING_LEVEL_MIN = 0
13
+ LOGGING_LEVEL_LOW = 1
14
+ LOGGING_LEVEL_MEDIUM = 2
15
+ LOGGING_LEVEL_MAX = 3
16
+
17
+ def __init__(self, *args, **kwargs):
18
+ pass
19
+
20
+ def set_log_file(self, log_file):
21
+ pass
22
+
23
+ otq.OneTickLib = OneTickLibMock
24
+
25
+ else:
26
+ import onetick.query as otq
27
+ import pyomd
28
+
29
+
30
+ class LoggingLevel(Enum):
31
+ MIN = otq.OneTickLib.LOGGING_LEVEL_MIN
32
+ LOW = otq.OneTickLib.LOGGING_LEVEL_LOW
33
+ MEDIUM = otq.OneTickLib.LOGGING_LEVEL_MEDIUM
34
+ MAX = otq.OneTickLib.LOGGING_LEVEL_MAX
35
+
36
+
37
+ class OneTickLib:
38
+ """
39
+ Singleton class for ``otq.OneTickLib`` to initialize it once.
40
+
41
+ Returns the same object if it was already initialized.
42
+ """
43
+ __otl_instance = None
44
+ __instance = None
45
+ __args = None
46
+
47
+ def __new__(cls, *args, **kwargs):
48
+ if cls.__otl_instance is None:
49
+ cls.__otl_instance = super(OneTickLib, cls).__new__(cls)
50
+
51
+ def proxy_wrap(attr, static=False):
52
+
53
+ if static:
54
+ def f(*args, **kwargs): # type: ignore
55
+ return getattr(OneTickLib.__instance, attr)(*args, **kwargs)
56
+ return staticmethod(f)
57
+ else:
58
+ def f(self, *args, **kwargs): # type: ignore
59
+ return getattr(OneTickLib.__instance, attr)(*args, **kwargs)
60
+ return f
61
+
62
+ for attr, value in inspect.getmembers(otq.OneTickLib, callable):
63
+ if not attr.startswith('_') and not hasattr(OneTickLib, attr):
64
+ fun = inspect.getattr_static(otq.OneTickLib, attr)
65
+ static = isinstance(fun, staticmethod)
66
+ setattr(OneTickLib, attr, proxy_wrap(attr, static=static))
67
+
68
+ return cls.__otl_instance
69
+
70
+ def __init__(self, *args, log_file=None):
71
+ if OneTickLib.__instance is None:
72
+ if not args:
73
+ args = (None,)
74
+ OneTickLib.__args = args
75
+ OneTickLib.__instance = otq.OneTickLib(*args)
76
+ if log_file:
77
+ self.set_log_file(log_file)
78
+ elif args != OneTickLib.__args and args:
79
+ raise ValueError("OneTickLib was already initialized with different "
80
+ "parameters: Was: {} Now: {}".format(OneTickLib.__args, args))
81
+
82
+ def __eq__(self, otl):
83
+ return self.__dict__ == otl.__dict__
84
+
85
+ def __ne__(self, otl):
86
+ return self.__dict__ != otl.__dict__
87
+
88
+ def __str__(self):
89
+ return "Instance: {}".format(self.__instance.get_one_tick_lib())
90
+
91
+ def cleanup(self):
92
+ """
93
+ Destroy otq.OneTickLib instance and reset singleton class
94
+ """
95
+ del OneTickLib.__instance
96
+ gc.collect()
97
+ OneTickLib.__instance = None
98
+ OneTickLib.__args = None
99
+
100
+ def set_log_file(self, log_file):
101
+ """
102
+ Set log file for given instance of OneTickLib
103
+
104
+ :param log_file: path to log file
105
+ """
106
+ OneTickLib.__instance.set_log_file(str(log_file))
107
+ if hasattr(OneTickLib.__instance, 'close_log_file_in_destructor'):
108
+ # we need to check it to prevent failing CI on the builds that do not have this feature
109
+ OneTickLib.__instance.close_log_file_in_destructor()
110
+
111
+ def set_logging_level(self, lvl: LoggingLevel):
112
+ """
113
+ Logging level can be specified by using LoggingLevel Enum class
114
+
115
+ :param lvl: available values are LoggingLevel.MIN, LoggingLevel.LOW, LoggingLevel.MEDIUM or LoggingLevel.MAX
116
+ :return:
117
+ """
118
+ OneTickLib.__instance.set_logging_level(lvl)
119
+
120
+ def set_authentication_token(self, auth_token: str):
121
+ """
122
+ Set authentication token for given instance of OneTickLib
123
+
124
+ :param auth_token: authentication token
125
+ """
126
+ OneTickLib.__instance.set_authentication_token(auth_token)
127
+
128
+ @staticmethod
129
+ def override_config_value(config_parameter_name: str, config_parameter_value):
130
+ """
131
+ Override config value of OneTickConfig
132
+
133
+ :param config_parameter_name: param to override (could be both set or not set in OneTickConfig)
134
+ :param config_parameter_value: new value of the param
135
+ """
136
+ if OneTickLib.__instance:
137
+ raise RuntimeError('This method should be called before OneTickLib object is constructed to have effect.')
138
+ try:
139
+ pyomd.OneTickLib.override_config_value(config_parameter_name, config_parameter_value) # noqa
140
+ except NameError:
141
+ raise RuntimeError('This method is not available in WebAPI mode')