cloudpss 5.0.2__tar.gz → 5.0.3__tar.gz

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 (141) hide show
  1. {cloudpss-5.0.2 → cloudpss-5.0.3}/PKG-INFO +1 -1
  2. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/TemplateCompiler.py +85 -32
  3. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/TemplateManager.py +1 -0
  4. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/messageStreamReceiver.py +1 -1
  5. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/__init__.py +1 -0
  6. cloudpss-5.0.3/cloudpss/version.py +1 -0
  7. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss.egg-info/PKG-INFO +1 -1
  8. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss.egg-info/SOURCES.txt +2 -0
  9. cloudpss-5.0.3/test/test-eval.py +9 -0
  10. cloudpss-5.0.3/test/test-topology.py +27 -0
  11. cloudpss-5.0.3/test/test-topology33.py +27 -0
  12. cloudpss-5.0.2/cloudpss/version.py +0 -1
  13. cloudpss-5.0.2/test/test-topology.py +0 -25
  14. {cloudpss-5.0.2 → cloudpss-5.0.3}/README.md +0 -0
  15. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/__init__.py +0 -0
  16. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/__init__.py +0 -0
  17. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/job/__init__.py +0 -0
  18. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/job/job.py +0 -0
  19. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/job/messageStreamReceiver.py +0 -0
  20. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/job/messageStreamSender.py +0 -0
  21. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/model/__init__.py +0 -0
  22. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/model/model.py +0 -0
  23. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/model/revision.py +0 -0
  24. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/model/topology.py +0 -0
  25. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/utils/AsyncIterable.py +0 -0
  26. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/utils/__init__.py +0 -0
  27. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/asyncio/utils/httpAsyncRequest.py +0 -0
  28. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/__init__.py +0 -0
  29. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/dataManageModel.py +0 -0
  30. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/dslab.py +0 -0
  31. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/files/__init__.py +0 -0
  32. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/files/curveData.py +0 -0
  33. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/files/files.py +0 -0
  34. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/dslab/financialAnalysisModel.py +0 -0
  35. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/function/__init__.py +0 -0
  36. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/function/function.py +0 -0
  37. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/function/functionExecution.py +0 -0
  38. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/function/job.py +0 -0
  39. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/DataManageModel.py +0 -0
  40. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/EvaluationModel.py +0 -0
  41. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/IESLabOpt.py +0 -0
  42. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/IESLabPlan.py +0 -0
  43. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/IESLabSimulation.py +0 -0
  44. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/PlanModel.py +0 -0
  45. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/ieslab/__init__.py +0 -0
  46. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/__init__.py +0 -0
  47. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/job.py +0 -0
  48. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/jobReceiver.py +0 -0
  49. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/messageStreamSender.py +0 -0
  50. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/DSLabReliabilityResult.py +0 -0
  51. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/DSLabResilienceResult.py +0 -0
  52. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/EMTResult.py +0 -0
  53. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/IESLabSimulationResult.py +0 -0
  54. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/IESLabTypicalDayResult.py +0 -0
  55. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/IESResult.py +0 -0
  56. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/PowerFlowResult.py +0 -0
  57. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/job/result/result.py +0 -0
  58. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/__init__.py +0 -0
  59. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/__init__.py +0 -0
  60. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/diagram.py +0 -0
  61. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/diagramExpressionChecker.py +0 -0
  62. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/environments.py +0 -0
  63. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/evaluator.py +0 -0
  64. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/scope.py +0 -0
  65. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/union_find.py +0 -0
  66. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/check/utils.py +0 -0
  67. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/implements/__init__.py +0 -0
  68. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/implements/component.py +0 -0
  69. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/implements/diagram.py +0 -0
  70. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/implements/implement.py +0 -0
  71. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/jobDefinitions.py +0 -0
  72. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/model.py +0 -0
  73. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/revision.py +0 -0
  74. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/model/topology.py +0 -0
  75. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/project/__init__.py +0 -0
  76. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/project/project.py +0 -0
  77. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/DSLabResult.py +0 -0
  78. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/IESLabEvaluationResult.py +0 -0
  79. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/IESLabPlanResult.py +0 -0
  80. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/IESLabTypicalDayResult.py +0 -0
  81. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/MessageStreamReceiver.py +0 -0
  82. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/__init__.py +0 -0
  83. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/receiver.py +0 -0
  84. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/result.py +0 -0
  85. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/runner.py +0 -0
  86. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/storage.py +0 -0
  87. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/runner/transform.py +0 -0
  88. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/IO.py +0 -0
  89. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/__init__.py +0 -0
  90. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/dataEncoder.py +0 -0
  91. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/graphqlUtil.py +0 -0
  92. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/httprequests.py +0 -0
  93. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/matlab.py +0 -0
  94. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/parseDebugArgs.py +0 -0
  95. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/utils/yamlLoader.py +0 -0
  96. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss/verify.py +0 -0
  97. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss.egg-info/dependency_links.txt +0 -0
  98. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss.egg-info/requires.txt +0 -0
  99. {cloudpss-5.0.2 → cloudpss-5.0.3}/cloudpss.egg-info/top_level.txt +0 -0
  100. {cloudpss-5.0.2 → cloudpss-5.0.3}/setup.cfg +0 -0
  101. {cloudpss-5.0.2 → cloudpss-5.0.3}/setup.py +0 -0
  102. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-async.py +0 -0
  103. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-async2.py +0 -0
  104. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-async3.py +0 -0
  105. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-plot.py +0 -0
  106. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-plot1.py +0 -0
  107. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-sdk.py +0 -0
  108. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-sdk1.py +0 -0
  109. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-snapshot.py +0 -0
  110. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-tmp.py +0 -0
  111. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-topology1.py +0 -0
  112. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test-yield.py +0 -0
  113. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test.py +0 -0
  114. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test11.py +0 -0
  115. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test12.py +0 -0
  116. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test2.py +0 -0
  117. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test2221.py +0 -0
  118. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test7950.py +0 -0
  119. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testAsync.py +0 -0
  120. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testEvent.py +0 -0
  121. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testRt-test.py +0 -0
  122. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testRt.py +0 -0
  123. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testRt2.py +0 -0
  124. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testSend.py +0 -0
  125. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_TCP.py +0 -0
  126. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_control.py +0 -0
  127. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_fetch_many.py +0 -0
  128. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_in_new_web_1.py +0 -0
  129. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_modepower_ampratio(3).py +0 -0
  130. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_rt.py +0 -0
  131. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_rt_job.py +0 -0
  132. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_tty.py +0 -0
  133. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_ws.py +0 -0
  134. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_ws2.py +0 -0
  135. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/test_ws3.py +0 -0
  136. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testb.py +0 -0
  137. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testkey.py +0 -0
  138. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testnet copy.py +0 -0
  139. {cloudpss-5.0.2 → cloudpss-5.0.3}/test/testnet.py +0 -0
  140. {cloudpss-5.0.2 → cloudpss-5.0.3}/tests/test_ieslab_opt.py +0 -0
  141. {cloudpss-5.0.2 → cloudpss-5.0.3}/tests/test_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 5.0.2
3
+ Version: 5.0.3
4
4
  Summary: cloudpss sdk
5
5
  Home-page: https://www.cloudpss.net
6
6
  Author: cloudpss
@@ -2,7 +2,7 @@ import json
2
2
  from collections import namedtuple
3
3
  from typing import Any, Dict, List, Union
4
4
  import copy
5
-
5
+ import traceback
6
6
  PARSER_STATUS_TEXT = 0
7
7
  PARSER_STATUS_EXPRESSION_SIMPLE = 1
8
8
  PARSER_STATUS_EXPRESSION_COMPLEX = 2
@@ -105,6 +105,7 @@ def parse_interpolation_impl(template, start, length):
105
105
  'values': values,
106
106
  }
107
107
 
108
+
108
109
  # 是否为 ArrayBuffer
109
110
  def is_array_buffer(value: Any) -> bool:
110
111
  return isinstance(value, (memoryview, bytearray))
@@ -113,15 +114,28 @@ def is_array_buffer(value: Any) -> bool:
113
114
  def is_error(value: Any) -> bool:
114
115
  return isinstance(value, Exception)
115
116
 
117
+ def formula(template: str) -> str:
118
+
119
+ value=None
120
+ try:
121
+ from mirascript import compile
122
+ value = compile(template, input_mode='script')
123
+ except ImportError:
124
+ raise ImportError('mirascript is required for formula evaluation')
125
+
126
+ return {
127
+ 'type': 'formula',
128
+ 'value': value,
129
+ }
116
130
 
117
131
  def parse_template(template: str) -> Any:
118
132
  if not template:
119
133
  return ''
134
+ if len(template) <= 1:
135
+ return template
120
136
  if template.startswith('='):
121
- return {
122
- 'type': 'formula',
123
- 'value': template[1:].strip(),
124
- }
137
+ # print("formula template:", template)
138
+ return formula(template[1:].strip())
125
139
  if template.startswith('$'):
126
140
  result = parse_interpolation_impl(template, 1, len(template)-1)
127
141
  if len(result['templates']) == 0:
@@ -140,7 +154,11 @@ class TemplateCompiler:
140
154
  self.options = options
141
155
  self.params = {}
142
156
  self.copyable = []
157
+ self.useList = []
143
158
 
159
+ def use(self, name: str) -> str:
160
+ self.useList.append(name)
161
+ return len(self.useList) - 1
144
162
  # 构建求值
145
163
  def build_eval(self, expression: str, type_: str) -> str:
146
164
  evaluator = self.options['evaluator']
@@ -149,28 +167,28 @@ class TemplateCompiler:
149
167
  return evaluator['compile'](expression, type_)
150
168
 
151
169
  # 构建字符串
152
- def build_string(self, str_: str) -> Union[str, bool]:
170
+ def build_template(self, str_: str) -> Union[str, bool]:
153
171
  parsed = parse_template(str_)
172
+
173
+
174
+
154
175
  if isinstance(parsed, str):
155
- return json.dumps(parsed), False
156
- if parsed['type'] == 'formula':
157
- return self.build_eval(parsed['value'], parsed['type']), True
158
- result = ''
159
- for i in range(len(parsed['templates'])):
160
- if parsed['templates'][i]:
161
- result += (result and '+' or '') + json.dumps(parsed['templates'][i])
162
- if i < len(parsed['values']):
163
- if not result:
164
- result = '""'
165
- result += '+' + self.build_eval(parsed['values'][i], parsed['type'])
166
- return result, True
176
+ return json.dumps(parsed)
177
+ useIndex = self.use(parsed['value'][0])
178
+ # print("parsed template:", parsed['value'],str_,useIndex)
179
+
180
+ return """useList[{useIndex}](context)""".format(useIndex=useIndex)
181
+ # return "1"
182
+
183
+
184
+
167
185
 
168
186
  # 构建 Error
169
187
  def build_error(self, err: Exception) -> str:
170
188
  constructor="Error"
171
189
  if err.__class__.__name__ == constructor:
172
- return f'new {constructor}({self.build_string(err.message)[0]})'
173
- return f'Object.assign(new {constructor}({self.build_string(err.message)[0]}), {{name: {self.build_string(err.name)[0]}}})'
190
+ return f'new {constructor}({self.build_template(err.message)[0]})'
191
+ return f'Object.assign(new {constructor}({self.build_template(err.message)[0]}), {{name: {self.build_template(err.name)[0]}}})'
174
192
 
175
193
  # 构建数组
176
194
  def build_array(self, arr: List[Any]) -> str:
@@ -195,11 +213,8 @@ class TemplateCompiler:
195
213
  if self.options['objectKeyMode'] == 'ignore':
196
214
  result += json.dumps(key)
197
215
  else:
198
- e, is_expression = self.build_string(key)
199
- if is_expression:
200
- result += f'[{e}]'
201
- else:
202
- result += e
216
+ e = self.build_template(key)
217
+ result += f'{e}'
203
218
  result += ':'
204
219
  result += self.build_value(value)
205
220
  return '{' + result + '}'
@@ -214,8 +229,10 @@ class TemplateCompiler:
214
229
  return 'False'
215
230
  if isinstance(value, (int, float)):
216
231
  return str(value)
232
+
217
233
  if isinstance(value, str):
218
- return self.build_string(value)[0]
234
+ return self.build_template(value)
235
+
219
236
  if isinstance(value, Exception):
220
237
  return self.build_error(value)
221
238
  if isinstance(value, list):
@@ -234,12 +251,15 @@ class TemplateCompiler:
234
251
  source = self.build_value(self.template)
235
252
  if self.copyable:
236
253
  self.params['copyable'] = self.copyable
237
- params = list(self.params.items())
254
+ # params = list(self.params.items())
255
+ # print("template source:", source)
238
256
  try:
239
- result = eval(f'lambda context: ({source})')
257
+ result = eval(f'lambda context: ({source})',{"useList": self.useList})
258
+ # result = eval(f'lambda context: (useList[127](context))',{"useList": self.useList})
240
259
  result.source = source
241
260
  return result
242
261
  except Exception as e:
262
+ traceback.print_exc()
243
263
  raise ValueError(f'Failed to compile template: {source}\n{str(e)}')
244
264
 
245
265
 
@@ -263,9 +283,42 @@ def template(templates,options={}):
263
283
 
264
284
 
265
285
  if __name__ == "__main__":
286
+
287
+ # f =open("D:/code/python/test/result1-temp.json","r",encoding="utf-8")
288
+
289
+ # message =f.read()
290
+ # f.close()
291
+ # message = json.loads(message)
292
+
293
+ # id =message[0]
294
+
295
+ # templates=message[3:]
266
296
 
267
- message =[1, 1, {'component_load_5_无功功率': [0], 'component_load_5_有功功率': [0], 'time': ['placeholder']}, {'data': {'title': '负荷5功率(kW)', 'traces': [{'name': '有功功率', 'type': 'scatter', 'x': '=time', 'y': '=component_load_5_有功功率'}, {'name': '无功功率', 'type': 'scatter', 'x': '=time', 'y': '=component_load_5_无功功率'}], 'xAxis': {'title': 'time'}, 'yAxis': {'title': '功率(kW)'}}, 'key': '/component_load_5_功率(kW)', 'type': 'plot', 'verb': 'append', 'version': 1}]
268
- message =[782312650, 1, {'t': [], 'd5': [], 'd8': [], 'd9': [], 'v0': 'append', 'd6': [], 'v1': 'append'}, {'key': 'plot-1', 'version': 1, 'type': 'plot', 'verb': '=v0', 'data': {'title': '整流侧交流电流', 'layout': {'xaxis.range': '=xr0', 'xaxis.autorange': False}, 'traces': [{'name': 'Ia', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d5'}, {'name': 'Ib', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d8'}, {'name': 'Ic', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d9'}]}}, {'key': 'plot-2', 'version': 1, 'type': 'plot', 'verb': '=v1', 'data': {'title': 'A相上桥臂电容电压', 'layout': {'xaxis.range': '=xr1', 'xaxis.autorange': False}, 'traces': [{'name': 'Vc', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d6'}]}}]
297
+ # x= template(templates)
298
+
299
+ # f2 =open("D:/code/python/test/result1-temp-value.json","r",encoding="utf-8")
300
+ # data =f2.read()
301
+ # f2.close()
302
+ # values=json.loads(data)
303
+
304
+ # print("x: ",x)
305
+
306
+ # data= values[2]
307
+ # try:
308
+ # s=x({**message[2],**data})
309
+ # print("s: ",s)
310
+ # except Exception as e:
311
+ # traceback.print_exc()
312
+ # print(f'Error: {e}')
313
+
314
+
315
+ message =[
316
+ 782312650,
317
+ 1,
318
+ {'t': [], 'd5': [], 'd8': [], 'd9': [], 'v0': 'append', 'd6': [], 'v1': 'append'},
319
+ {'key': 'plot-1', 'version': 1, 'type': 'plot', 'verb': '=v0', 'data': {'title': '整流侧交流电流', 'layout': {'xaxis.range': '=xr0', 'xaxis.autorange': False}, 'traces': [{'name': 'Ia', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d5'}, {'name': 'Ib', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d8'}, {'name': 'Ic', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d9'}]}},
320
+ {'key': 'plot-2', 'version': 1, 'type': 'plot', 'verb': '=v1', 'data': {'title': 'A相上桥臂电容电压', 'layout': {'xaxis.range': '=xr1', 'xaxis.autorange': False}, 'traces': [{'name': 'Vc', 'type': 'scattergl', 'yaxis': 'y', 'x': '=t', 'y': '=d6'}]}}
321
+ ]
269
322
  id =message[0]
270
323
 
271
324
  templates=message[3:]
@@ -274,9 +327,9 @@ if __name__ == "__main__":
274
327
 
275
328
  values=[782312650, 1, {'t': [0.009999999999999967, 0.010999999999999961, 0.011999999999999955, 0.012999999999999949, 0.013999999999999943, 0.014999999999999937, 0.015999999999999945, 0.016999999999999973, 0.018000000000000002, 0.01900000000000003], 'd5': [0.07483153188510672, 0.09331340076657475, 0.10060354339781043, 0.08143820164529898, 0.06475492808815062, 0.03988870901471444, 0.017856545584211857, -0.00022077163899950848, -0.01795813197603053, -0.02080189617972792], 'd8': [-0.1375203178103291, -0.10701993395081587, -0.08370609309571676, -0.04136648742407317, -0.009632672956318231, 0.012930786595120338, 0.023576938091071184, 0.027067414097930786, 0.02056424854512571, 0.0032354404004249202], 'd9': [0.06256431502056557, 0.013651990940627457, -0.01694762608987588, -0.039966571588256096, -0.055297953120400006, -0.05275643941375492, -0.04137165007706727, -0.02687559851684142, -0.0025904403473839465, 0.017612961883902756], 'd6': [11.089656437630765, 11.090168556304207, 11.09058932753887, 11.090721058893884, 11.090593484855583, 11.090478358824114, 11.090135588005115, 11.089385203292103, 11.088182236357547, 11.086255229686746], 'xr0': [0, 2], 'xr1': [0, 2]}]
276
329
 
277
- print(x)
330
+ # print(x)
278
331
 
279
332
  data= values[2]
280
- s=x(data)
333
+ s=x({**message[2],**data})
281
334
 
282
335
  print(s)
@@ -33,5 +33,6 @@ class TemplateManager():
33
33
  t = self.templateMap.get(id,None)
34
34
  if t is None:
35
35
  return []
36
+ args= {**t['value'][2],**args}
36
37
  return t['template'](args)
37
38
 
@@ -141,7 +141,7 @@ class MessageStreamReceiver(JobReceiver):
141
141
  "content": "websocket closed",
142
142
  },
143
143
  }
144
- self.messages.append(msg)
144
+ # self.messages.append(msg)
145
145
  self._status = 1
146
146
  self.ws = None
147
147
  if self.job is not None:
@@ -25,6 +25,7 @@ RESULT = {
25
25
  'function/CloudPSS/ieslab-gmm':IESLabTypicalDayResult,
26
26
  'function/CloudPSS/ieslab-optimization': IESResult,
27
27
  'function/CloudPSS/ieslab-gmm-opt':IESLabTypicalDayResult,
28
+ 'function/CloudPSS/tsinge': EMTResult,
28
29
  }
29
30
 
30
31
 
@@ -0,0 +1 @@
1
+ __version__ = '5.0.3'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 5.0.2
3
+ Version: 5.0.3
4
4
  Summary: cloudpss sdk
5
5
  Home-page: https://www.cloudpss.net
6
6
  Author: cloudpss
@@ -95,6 +95,7 @@ cloudpss/utils/yamlLoader.py
95
95
  test/test-async.py
96
96
  test/test-async2.py
97
97
  test/test-async3.py
98
+ test/test-eval.py
98
99
  test/test-plot.py
99
100
  test/test-plot1.py
100
101
  test/test-sdk.py
@@ -103,6 +104,7 @@ test/test-snapshot.py
103
104
  test/test-tmp.py
104
105
  test/test-topology.py
105
106
  test/test-topology1.py
107
+ test/test-topology33.py
106
108
  test/test-yield.py
107
109
  test/test.py
108
110
  test/test11.py
@@ -0,0 +1,9 @@
1
+ if __name__ == "__main__":
2
+
3
+ t={
4
+ "a":4,
5
+ "b":2
6
+ }
7
+ x="""lambda context: (context.get("a",None) + context.get("b",None)+a)"""
8
+
9
+ print(eval(x,t)({"a":1,"b":2}))
@@ -0,0 +1,27 @@
1
+ import sys
2
+ import os
3
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
4
+ import cloudpss
5
+ import time
6
+ import numpy as np
7
+ import json
8
+
9
+ if __name__ == '__main__':
10
+ os.environ['CLOUDPSS_API_URL'] = 'http://10.101.10.233/'
11
+ print('CLOUDPSS connected')
12
+ cloudpss.setToken(
13
+ 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInNjb3BlcyI6WyJtb2RlbDo5ODM2NyIsImZ1bmN0aW9uOjk4MzY3IiwiYXBwbGljYXRpb246MzI4MzEiXSwicm9sZXMiOlsiYWRtaW4iXSwidHlwZSI6ImFwcGx5IiwiZXhwIjoxODEyMTg5MTc3LCJub3RlIjoidGVzdCIsImlhdCI6MTc4MTA4NTE3N30.DqEEQSztiCALqumIbDVodK-tzWz_x5WpGtevkLyKi3qrKXpZGgclCyjrFLNT9YlJWYD12N-C7qe5x_tTeJZ_3w')
14
+ print('Token done')
15
+ # project = cloudpss.Model.fetch('model/open-cloudpss/CSEE_PFO_Temporary-v1b1')
16
+
17
+ # topology = project.fetchTopology(config={'args':{}},maximumDepth=50)
18
+
19
+
20
+
21
+
22
+ topology = cloudpss.ModelTopology.fetch('tlHIN5yZlnBM7VS11ssM8ReNAB2rNpSa-p4P-XKQYwFjOX9ZVWaqKArPj8vQV6Ay','emtp',config={'args':{}})
23
+
24
+ print(topology)
25
+
26
+ topology.dump(topology, 'topology.json', indent=4)
27
+
@@ -0,0 +1,27 @@
1
+ import sys
2
+ import os
3
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
4
+ import cloudpss
5
+ import time
6
+ import numpy as np
7
+ import json
8
+
9
+ if __name__ == '__main__':
10
+ os.environ['CLOUDPSS_API_URL'] = 'http://10.101.10.33/'
11
+ print('CLOUDPSS connected')
12
+ cloudpss.setToken(
13
+ 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInNjb3BlcyI6WyJtb2RlbDo5ODM2NyIsImZ1bmN0aW9uOjk4MzY3IiwiYXBwbGljYXRpb246MzI4MzEiXSwicm9sZXMiOlsiYWRtaW4iXSwidHlwZSI6ImFwcGx5IiwiZXhwIjoxODEyMTk0MDg0LCJub3RlIjoieHgiLCJpYXQiOjE3ODEwOTAwODR9.SsS8E92Ya9xro-zrVw7b6Gf-o-xLpg3Wja2eCqCq6qK_Fajl-MqCTzHsNUIKZ2El4UweZovv8ZT6DqBwBkDOvw')
14
+ print('Token done')
15
+ # project = cloudpss.Model.fetch('model/open-cloudpss/CSEE_PFO_Temporary-v1b1')
16
+
17
+ # topology = project.fetchTopology(config={'args':{}},maximumDepth=50)
18
+
19
+
20
+
21
+
22
+ topology = cloudpss.ModelTopology.fetch('UOOLix43SwMTDdVSaYUDsBkvP_fbajRetIJcATOtJ9mFtMkRxZRPinS1JOvBb3Zg','emtp',config={'args':{}})
23
+
24
+ print(topology)
25
+
26
+ topology.dump(topology, 'topology2.json', indent=4)
27
+
@@ -1 +0,0 @@
1
- __version__ = '5.0.2'
@@ -1,25 +0,0 @@
1
- import sys
2
- import os
3
- sys.path.append(os.path.join(os.path.dirname(__file__), '..\\'))
4
- import cloudpss
5
- import time
6
- import numpy as np
7
- import json
8
-
9
- if __name__ == '__main__':
10
- os.environ['CLOUDPSS_API_URL'] = 'http://10.101.10.42/'
11
- print('CLOUDPSS connected')
12
- cloudpss.setToken(
13
- 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInNjb3BlcyI6WyJicm93c2VyIl0sInR5cGUiOiJicm93c2VyIiwiZXhwIjoxNzc2NDIzODExLCJpYXQiOjE3NzM3NDU0MTF9.U7rBhaNes1JF6CvyaE4eMDs6dwTxTYqa_kZAaTW70gikWUal7pQBpwx7S53y7nhmjxM8ISxwMsc-QWW_wJId_g')
14
- print('Token done')
15
- project = cloudpss.Model.fetch('model/admin/adfw123')
16
-
17
- topology = project.fetchTopology(config={'args':{}},maximumDepth=10)
18
-
19
-
20
-
21
-
22
- topology.dump(topology,'test.json')
23
-
24
-
25
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes