deepfos 1.1.60__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 (175) hide show
  1. deepfos/__init__.py +6 -0
  2. deepfos/_version.py +21 -0
  3. deepfos/algo/__init__.py +0 -0
  4. deepfos/algo/graph.py +171 -0
  5. deepfos/algo/segtree.py +31 -0
  6. deepfos/api/V1_1/__init__.py +0 -0
  7. deepfos/api/V1_1/business_model.py +119 -0
  8. deepfos/api/V1_1/dimension.py +599 -0
  9. deepfos/api/V1_1/models/__init__.py +0 -0
  10. deepfos/api/V1_1/models/business_model.py +1033 -0
  11. deepfos/api/V1_1/models/dimension.py +2768 -0
  12. deepfos/api/V1_2/__init__.py +0 -0
  13. deepfos/api/V1_2/dimension.py +285 -0
  14. deepfos/api/V1_2/models/__init__.py +0 -0
  15. deepfos/api/V1_2/models/dimension.py +2923 -0
  16. deepfos/api/__init__.py +0 -0
  17. deepfos/api/account.py +167 -0
  18. deepfos/api/accounting_engines.py +147 -0
  19. deepfos/api/app.py +626 -0
  20. deepfos/api/approval_process.py +198 -0
  21. deepfos/api/base.py +983 -0
  22. deepfos/api/business_model.py +160 -0
  23. deepfos/api/consolidation.py +129 -0
  24. deepfos/api/consolidation_process.py +106 -0
  25. deepfos/api/datatable.py +341 -0
  26. deepfos/api/deep_pipeline.py +61 -0
  27. deepfos/api/deepconnector.py +36 -0
  28. deepfos/api/deepfos_task.py +92 -0
  29. deepfos/api/deepmodel.py +188 -0
  30. deepfos/api/dimension.py +486 -0
  31. deepfos/api/financial_model.py +319 -0
  32. deepfos/api/journal_model.py +119 -0
  33. deepfos/api/journal_template.py +132 -0
  34. deepfos/api/memory_financial_model.py +98 -0
  35. deepfos/api/models/__init__.py +3 -0
  36. deepfos/api/models/account.py +483 -0
  37. deepfos/api/models/accounting_engines.py +756 -0
  38. deepfos/api/models/app.py +1338 -0
  39. deepfos/api/models/approval_process.py +1043 -0
  40. deepfos/api/models/base.py +234 -0
  41. deepfos/api/models/business_model.py +805 -0
  42. deepfos/api/models/consolidation.py +711 -0
  43. deepfos/api/models/consolidation_process.py +248 -0
  44. deepfos/api/models/datatable_mysql.py +427 -0
  45. deepfos/api/models/deep_pipeline.py +55 -0
  46. deepfos/api/models/deepconnector.py +28 -0
  47. deepfos/api/models/deepfos_task.py +386 -0
  48. deepfos/api/models/deepmodel.py +308 -0
  49. deepfos/api/models/dimension.py +1576 -0
  50. deepfos/api/models/financial_model.py +1796 -0
  51. deepfos/api/models/journal_model.py +341 -0
  52. deepfos/api/models/journal_template.py +854 -0
  53. deepfos/api/models/memory_financial_model.py +478 -0
  54. deepfos/api/models/platform.py +178 -0
  55. deepfos/api/models/python.py +221 -0
  56. deepfos/api/models/reconciliation_engine.py +411 -0
  57. deepfos/api/models/reconciliation_report.py +161 -0
  58. deepfos/api/models/role_strategy.py +884 -0
  59. deepfos/api/models/smartlist.py +237 -0
  60. deepfos/api/models/space.py +1137 -0
  61. deepfos/api/models/system.py +1065 -0
  62. deepfos/api/models/variable.py +463 -0
  63. deepfos/api/models/workflow.py +946 -0
  64. deepfos/api/platform.py +199 -0
  65. deepfos/api/python.py +90 -0
  66. deepfos/api/reconciliation_engine.py +181 -0
  67. deepfos/api/reconciliation_report.py +64 -0
  68. deepfos/api/role_strategy.py +234 -0
  69. deepfos/api/smartlist.py +69 -0
  70. deepfos/api/space.py +582 -0
  71. deepfos/api/system.py +372 -0
  72. deepfos/api/variable.py +154 -0
  73. deepfos/api/workflow.py +264 -0
  74. deepfos/boost/__init__.py +6 -0
  75. deepfos/boost/py_jstream.py +89 -0
  76. deepfos/boost/py_pandas.py +20 -0
  77. deepfos/cache.py +121 -0
  78. deepfos/config.py +6 -0
  79. deepfos/core/__init__.py +27 -0
  80. deepfos/core/cube/__init__.py +10 -0
  81. deepfos/core/cube/_base.py +462 -0
  82. deepfos/core/cube/constants.py +21 -0
  83. deepfos/core/cube/cube.py +408 -0
  84. deepfos/core/cube/formula.py +707 -0
  85. deepfos/core/cube/syscube.py +532 -0
  86. deepfos/core/cube/typing.py +7 -0
  87. deepfos/core/cube/utils.py +238 -0
  88. deepfos/core/dimension/__init__.py +11 -0
  89. deepfos/core/dimension/_base.py +506 -0
  90. deepfos/core/dimension/dimcreator.py +184 -0
  91. deepfos/core/dimension/dimension.py +472 -0
  92. deepfos/core/dimension/dimexpr.py +271 -0
  93. deepfos/core/dimension/dimmember.py +155 -0
  94. deepfos/core/dimension/eledimension.py +22 -0
  95. deepfos/core/dimension/filters.py +99 -0
  96. deepfos/core/dimension/sysdimension.py +168 -0
  97. deepfos/core/logictable/__init__.py +5 -0
  98. deepfos/core/logictable/_cache.py +141 -0
  99. deepfos/core/logictable/_operator.py +663 -0
  100. deepfos/core/logictable/nodemixin.py +673 -0
  101. deepfos/core/logictable/sqlcondition.py +609 -0
  102. deepfos/core/logictable/tablemodel.py +497 -0
  103. deepfos/db/__init__.py +36 -0
  104. deepfos/db/cipher.py +660 -0
  105. deepfos/db/clickhouse.py +191 -0
  106. deepfos/db/connector.py +195 -0
  107. deepfos/db/daclickhouse.py +171 -0
  108. deepfos/db/dameng.py +101 -0
  109. deepfos/db/damysql.py +189 -0
  110. deepfos/db/dbkits.py +358 -0
  111. deepfos/db/deepengine.py +99 -0
  112. deepfos/db/deepmodel.py +82 -0
  113. deepfos/db/deepmodel_kingbase.py +83 -0
  114. deepfos/db/edb.py +214 -0
  115. deepfos/db/gauss.py +83 -0
  116. deepfos/db/kingbase.py +83 -0
  117. deepfos/db/mysql.py +184 -0
  118. deepfos/db/oracle.py +131 -0
  119. deepfos/db/postgresql.py +192 -0
  120. deepfos/db/sqlserver.py +99 -0
  121. deepfos/db/utils.py +135 -0
  122. deepfos/element/__init__.py +89 -0
  123. deepfos/element/accounting.py +348 -0
  124. deepfos/element/apvlprocess.py +215 -0
  125. deepfos/element/base.py +398 -0
  126. deepfos/element/bizmodel.py +1269 -0
  127. deepfos/element/datatable.py +2467 -0
  128. deepfos/element/deep_pipeline.py +186 -0
  129. deepfos/element/deepconnector.py +59 -0
  130. deepfos/element/deepmodel.py +1806 -0
  131. deepfos/element/dimension.py +1254 -0
  132. deepfos/element/fact_table.py +427 -0
  133. deepfos/element/finmodel.py +1485 -0
  134. deepfos/element/journal.py +840 -0
  135. deepfos/element/journal_template.py +943 -0
  136. deepfos/element/pyscript.py +412 -0
  137. deepfos/element/reconciliation.py +553 -0
  138. deepfos/element/rolestrategy.py +243 -0
  139. deepfos/element/smartlist.py +457 -0
  140. deepfos/element/variable.py +756 -0
  141. deepfos/element/workflow.py +560 -0
  142. deepfos/exceptions/__init__.py +239 -0
  143. deepfos/exceptions/hook.py +86 -0
  144. deepfos/lazy.py +104 -0
  145. deepfos/lazy_import.py +84 -0
  146. deepfos/lib/__init__.py +0 -0
  147. deepfos/lib/_javaobj.py +366 -0
  148. deepfos/lib/asynchronous.py +879 -0
  149. deepfos/lib/concurrency.py +107 -0
  150. deepfos/lib/constant.py +39 -0
  151. deepfos/lib/decorator.py +310 -0
  152. deepfos/lib/deepchart.py +778 -0
  153. deepfos/lib/deepux.py +477 -0
  154. deepfos/lib/discovery.py +273 -0
  155. deepfos/lib/edb_lexer.py +789 -0
  156. deepfos/lib/eureka.py +156 -0
  157. deepfos/lib/filterparser.py +751 -0
  158. deepfos/lib/httpcli.py +106 -0
  159. deepfos/lib/jsonstreamer.py +80 -0
  160. deepfos/lib/msg.py +394 -0
  161. deepfos/lib/nacos.py +225 -0
  162. deepfos/lib/patch.py +92 -0
  163. deepfos/lib/redis.py +241 -0
  164. deepfos/lib/serutils.py +181 -0
  165. deepfos/lib/stopwatch.py +99 -0
  166. deepfos/lib/subtask.py +572 -0
  167. deepfos/lib/sysutils.py +703 -0
  168. deepfos/lib/utils.py +1003 -0
  169. deepfos/local.py +160 -0
  170. deepfos/options.py +670 -0
  171. deepfos/translation.py +237 -0
  172. deepfos-1.1.60.dist-info/METADATA +33 -0
  173. deepfos-1.1.60.dist-info/RECORD +175 -0
  174. deepfos-1.1.60.dist-info/WHEEL +5 -0
  175. deepfos-1.1.60.dist-info/top_level.txt +1 -0
@@ -0,0 +1,238 @@
1
+ import functools
2
+ from collections import defaultdict
3
+ from typing import Dict, Iterable, Union, NamedTuple
4
+ import itertools
5
+
6
+ from deepfos.core.cube.constants import DATACOL_DFLT
7
+
8
+ from pandas import Series
9
+ import pandas as pd
10
+ import numpy as np
11
+
12
+
13
+ def merge_dict(*dicts):
14
+ rtn = defaultdict(set)
15
+ for dct in dicts:
16
+ for k, v in dct.items():
17
+ rtn[k].update(v)
18
+
19
+ return rtn
20
+
21
+
22
+ def dict_to_sql(
23
+ dict_: Dict[str, Iterable[str]],
24
+ eq: str,
25
+ concat: str = 'and',
26
+ bracket: bool = True,
27
+ ):
28
+ sql_list = []
29
+
30
+ for k, v in dict_.items():
31
+ v = tuple(set(v))
32
+
33
+ if len(v) == 1:
34
+ sql = f"{k}{eq}{v[0]!r}"
35
+ else:
36
+ sql = f"{k} in {v!r}"
37
+
38
+ sql_list.append(sql)
39
+
40
+ sql = f" {concat} ".join(sql_list)
41
+ if bracket:
42
+ return '(' + sql + ')'
43
+ return sql
44
+
45
+
46
+ def dicts_to_sql(dicts, sql_type='pandas'):
47
+ eq = '==' if sql_type == 'pandas' else '='
48
+
49
+ sql_list = []
50
+
51
+ for dc in dicts:
52
+ sql_list.append(dict_to_sql(dc, eq))
53
+
54
+ return ' or '.join(sql_list)
55
+
56
+
57
+ def pipe(functions, init_arg):
58
+ for func in functions:
59
+ init_arg = func(init_arg)
60
+
61
+ return init_arg
62
+
63
+
64
+ def multi_product(*dataframes: pd.DataFrame, data_col=DATACOL_DFLT, dropna=False):
65
+ counter = itertools.count().__next__
66
+ all_data_cols = [data_col]
67
+
68
+ if len(dataframes) == 1:
69
+ return dataframes[0], all_data_cols
70
+
71
+ left = dataframes[0]
72
+
73
+ for right in dataframes[1:]:
74
+
75
+ common_cols = left.columns.intersection(right.columns)
76
+ on = [col for col in common_cols if col != data_col]
77
+ r_suffix = f'_{counter()}'
78
+
79
+ if not on:
80
+ # 对于没有公共列的数据,补充一个临时列用于join
81
+ tmp_key = 't3mp#_j01ne6#_key#'
82
+ left[tmp_key] = 1
83
+ right[tmp_key] = 1
84
+ left = left.merge(right, on=tmp_key, how='outer', suffixes=('', r_suffix)).\
85
+ drop(tmp_key, axis=1)
86
+ else:
87
+ left = left.merge(right, on=on, how='outer', suffixes=('', r_suffix))
88
+
89
+ if dropna:
90
+ left = left.dropna()
91
+
92
+ all_data_cols.extend(f"{data_col}_{i}" for i in range(counter()))
93
+ return left, all_data_cols
94
+
95
+
96
+ def guard_method(*candidates, attr):
97
+
98
+ def guard(func):
99
+ @functools.wraps(func)
100
+ def wrapper(self, *args, **kwargs):
101
+ target = getattr(self, attr)
102
+
103
+ if target not in candidates:
104
+ raise RuntimeError(
105
+ f"Cannot call {func.__qualname__} while '{attr} = {target}'. "
106
+ f"Allowed states are: {candidates}")
107
+
108
+ return func(self, *args, **kwargs)
109
+
110
+ return wrapper
111
+
112
+ return guard
113
+
114
+
115
+ class Options(NamedTuple):
116
+ missing_value_add: Union[int, float] = 0
117
+ missing_value_radd: Union[int, float] = 0
118
+ missing_value_sub: Union[int, float] = 0
119
+ missing_value_rsub: Union[int, float] = 0
120
+ missing_value_mul: Union[int, float] = 1
121
+ missing_value_rmul: Union[int, float] = 1
122
+ # missing_value_div: Union[int, float] = np.NaN
123
+ # missing_value_rdiv: Union[int, float] = np.NAN
124
+ fill_missing_against_constant: bool = True
125
+
126
+ def replace(self, /, **options):
127
+ result = self._make(map(options.pop, self._fields, self))
128
+ if options:
129
+ raise ValueError(f'Got unexpected options: {list(options)!r}')
130
+ return result
131
+
132
+
133
+ def _auto_fill(func, key):
134
+ @functools.wraps(func)
135
+ def wrapper(self, other):
136
+ value = getattr(self.custom_options, key)
137
+
138
+ if not isinstance(other, self.__class__):
139
+ if self.custom_options.fill_missing_against_constant:
140
+ me = self.fillna(value, downcast='infer')
141
+ else:
142
+ me = self
143
+ return func(me, other)
144
+
145
+ both_nan = self.isna() & other.isna()
146
+ me = self.fillna(value, downcast='infer')
147
+ other = other.fillna(value, downcast='infer')
148
+
149
+ rslt = func(me, other)
150
+ rslt.loc[both_nan] = np.NAN
151
+ return rslt
152
+
153
+ return wrapper
154
+
155
+
156
+ class AutoFillSeries(Series):
157
+ _metadata = ['custom_options']
158
+
159
+ @property
160
+ def _constructor(self):
161
+ return AutoFillSeries
162
+
163
+ @property
164
+ def _constructor_expanddim(self):
165
+ return AutoFillSeries
166
+
167
+ __add__ = _auto_fill(Series.__add__, 'missing_value_add')
168
+ __sub__ = _auto_fill(Series.__sub__, 'missing_value_sub')
169
+ __mul__ = _auto_fill(Series.__mul__, 'missing_value_mul')
170
+ __radd__ = _auto_fill(Series.__radd__, 'missing_value_radd')
171
+ __rsub__ = _auto_fill(Series.__rsub__, 'missing_value_rsub')
172
+ __rmul__ = _auto_fill(Series.__rmul__, 'missing_value_rmul')
173
+
174
+
175
+ def create_df_by_cproduct(col_map: Dict) -> pd.DataFrame:
176
+ data = list(itertools.product(*col_map.values()))
177
+ columns = list(col_map.keys())
178
+
179
+ return pd.DataFrame(data, columns=columns)
180
+
181
+
182
+ def iter_rename_map(node, start=0, offset=None):
183
+ class Level:
184
+ level = 0
185
+
186
+ end = start + (offset or np.PINF)
187
+
188
+ level_end = Level()
189
+ rename_map = {}
190
+
191
+ node_to_visit = node.children[:]
192
+ node_to_visit.append(level_end)
193
+
194
+ while node_to_visit:
195
+ child = node_to_visit.pop(0)
196
+
197
+ if child is level_end:
198
+ if not rename_map:
199
+ break
200
+
201
+ if start <= level_end.level < end:
202
+ yield rename_map
203
+
204
+ level_end.level += 1
205
+ node_to_visit.append(level_end)
206
+ rename_map = {}
207
+ else:
208
+ rename_map[child.name] = child.parent.name
209
+ for grandchild in child.children:
210
+ node_to_visit.append(grandchild)
211
+
212
+
213
+ class _Zero:
214
+ def __bool__(self):
215
+ return False
216
+
217
+ def __add__(self, other):
218
+ if not isinstance(other, self.__class__):
219
+ return other
220
+ return self
221
+
222
+ def __radd__(self, other):
223
+ return self + other
224
+
225
+ def __mul__(self, other):
226
+ return self
227
+
228
+ def __rmul__(self, other):
229
+ return self
230
+
231
+ def __str__(self):
232
+ return 'ZERO'
233
+
234
+ def __eq__(self, other):
235
+ return self is other
236
+
237
+
238
+ Zero = _Zero()
@@ -0,0 +1,11 @@
1
+ from .dimmember import DimMember
2
+ from .sysdimension import SysDimension, read_expr
3
+ from .eledimension import ElementDimension
4
+ from .dimension import Dimension, SortedDimension
5
+ from .dimexpr import DimExprAnalysor
6
+
7
+
8
+ __all__ = [
9
+ 'Dimension', 'SortedDimension', 'DimExprAnalysor', 'DimMember',
10
+ 'SysDimension', 'read_expr', 'ElementDimension'
11
+ ]