cloudpss 4.1.1b7__py3-none-any.whl → 4.1.1b9__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 (46) hide show
  1. cloudpss/asyncio/__init__.py +8 -0
  2. cloudpss/asyncio/job/__init__.py +5 -0
  3. cloudpss/asyncio/job/job.py +116 -0
  4. cloudpss/asyncio/job/messageStreamReceiver.py +121 -0
  5. cloudpss/asyncio/job/messageStreamSender.py +45 -0
  6. cloudpss/asyncio/model/__init__.py +5 -0
  7. cloudpss/asyncio/model/model.py +257 -0
  8. cloudpss/asyncio/model/revision.py +41 -0
  9. cloudpss/asyncio/model/topology.py +34 -0
  10. cloudpss/asyncio/utils/__init__.py +6 -0
  11. cloudpss/{utils → asyncio/utils}/httpAsyncRequest.py +2 -2
  12. cloudpss/dslab/dataManageModel.py +24 -14
  13. cloudpss/dslab/dslab.py +115 -21
  14. cloudpss/dslab/files/curveData.py +35066 -35042
  15. cloudpss/dslab/files/files.py +21 -13
  16. cloudpss/function/functionExecution.py +10 -0
  17. cloudpss/ieslab/DataManageModel.py +65 -16
  18. cloudpss/ieslab/IESLabPlan.py +78 -0
  19. cloudpss/ieslab/IESLabSimulation.py +59 -32
  20. cloudpss/ieslab/PlanModel.py +11 -7
  21. cloudpss/job/job.py +119 -132
  22. cloudpss/job/jobReceiver.py +7 -1
  23. cloudpss/job/messageStreamReceiver.py +42 -99
  24. cloudpss/job/messageStreamSender.py +5 -42
  25. cloudpss/job/view/EMTView.py +9 -11
  26. cloudpss/job/view/IESLabTypicalDayView.py +114 -5
  27. cloudpss/job/view/view.py +36 -7
  28. cloudpss/model/implements/diagram.py +113 -0
  29. cloudpss/model/jobDefinitions.py +6 -6
  30. cloudpss/model/model.py +181 -193
  31. cloudpss/model/revision.py +29 -34
  32. cloudpss/model/topology.py +12 -14
  33. cloudpss/runner/MessageStreamReceiver.py +2 -0
  34. cloudpss/utils/httprequests.py +6 -5
  35. cloudpss/version.py +1 -1
  36. {cloudpss-4.1.1b7.dist-info → cloudpss-4.1.1b9.dist-info}/METADATA +1 -1
  37. cloudpss-4.1.1b9.dist-info/RECORD +77 -0
  38. cloudpss/dslab/DSLabFinancialResult.py +0 -96
  39. cloudpss/job/jobMachine.py +0 -11
  40. cloudpss/job/jobPolicy.py +0 -129
  41. cloudpss/job/jobQueue.py +0 -14
  42. cloudpss/job/jobTres.py +0 -6
  43. cloudpss-4.1.1b7.dist-info/RECORD +0 -72
  44. /cloudpss/{utils → asyncio/utils}/AsyncIterable.py +0 -0
  45. {cloudpss-4.1.1b7.dist-info → cloudpss-4.1.1b9.dist-info}/WHEEL +0 -0
  46. {cloudpss-4.1.1b7.dist-info → cloudpss-4.1.1b9.dist-info}/top_level.txt +0 -0
@@ -178,23 +178,33 @@ class DataManageModel(object):
178
178
  def AddDataItem(self, kind, data, extra=None):
179
179
  '''
180
180
  向kind类型的数据库中添加内容为data的数据项
181
- :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
181
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
182
182
  :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
183
183
  :params extra list类型,表示添加的基准出力曲线、负荷曲线、策略曲线数据
184
184
 
185
185
  :return: list<dict>类型,返回该种类下所有数据项的列表
186
186
  '''
187
187
  if extra is None or not extra:
188
- extra = getCurveData(kind)
189
- r = {
190
- 'simu': self.resourceId,
191
- 'name': data.get('name', ''),
192
- 'extra': extra,
193
- 'data': data.get('data', {}),
194
- }
195
- url = f"{self._baseUri}rest/{kind}"
196
- self._saveItemData(url, r)
197
- return self._fetchItemData(url)
188
+ curveData = getCurveData(kind)
189
+ if len(curveData) > 0:
190
+ r = {
191
+ 'simu': self.resourceId,
192
+ 'name': data.get('name', ''),
193
+ 'extra': curveData,
194
+ 'data': data.get('data', {}),
195
+ }
196
+ url = f"{self._baseUri}rest/{kind}"
197
+ self._saveItemData(url, r)
198
+ return self._fetchItemData(url)
199
+ else:
200
+ r = {
201
+ 'simu': self.resourceId,
202
+ 'name': data.get('name', ''),
203
+ 'data': data.get('data', {}),
204
+ }
205
+ url = f"{self._baseUri}rest/{kind}"
206
+ self._saveItemData(url, r)
207
+ return self._fetchItemData(url)
198
208
  else:
199
209
  r = {
200
210
  'simu': self.resourceId,
@@ -210,7 +220,7 @@ class DataManageModel(object):
210
220
  '''
211
221
  获取kind类型对应所有数据项的列表
212
222
  :params: id int类型,数据的id
213
- :params: kind str类型,数据的类型
223
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
214
224
 
215
225
  :return: list<dict>类型,返回该种类下所有数据项的列表
216
226
  '''
@@ -222,7 +232,7 @@ class DataManageModel(object):
222
232
  def UpdateDataItem(self, kind, data):
223
233
  '''
224
234
  更新kind类型对应数据项
225
- :params: kind str类型,数据的类型
235
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
226
236
  :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
227
237
 
228
238
  :return: list<dict>类型,返回该种类下所有数据项的列表
@@ -240,7 +250,7 @@ class DataManageModel(object):
240
250
  def GetItemList(self, kind):
241
251
  '''
242
252
  获取kind类型对应所有数据项的列表
243
- :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
253
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
244
254
 
245
255
  :return: list<dict>类型,返回该种类下所有数据项的列表
246
256
  '''
cloudpss/dslab/dslab.py CHANGED
@@ -76,71 +76,165 @@ class DSLab(object):
76
76
  '''
77
77
  return self.financialAnalysisModel.run(planID)
78
78
 
79
+ def runPowerFlow(self,job=None,name=None, **kwargs)->Runner[IESResult]:
80
+ '''
81
+ 运行 时序潮流方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
82
+
83
+ :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
84
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
79
85
 
80
- def runIESLoadPrediction(self,job=None,name=None, **kwargs)->Runner[IESResult]:
86
+ :return: runner Runner[IESResult]
81
87
  '''
82
- 运行 负荷预测方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
88
+ rid = 'function/CloudPSS/ieslab-power-flow'
89
+ if job is None:
90
+ currentJob = self.model.context['currentJob']
91
+ job = self.model.jobs[currentJob]
92
+ if job['rid'] != rid:
93
+ for j in self.model.jobs:
94
+ if j['rid'] == rid:
95
+ job = j
96
+ if job is None:
97
+ raise Exception("找不到时序潮流方案内核运行的计算方案")
98
+ if job['rid'] != rid:
99
+ raise Exception("不是时序潮流方案内核运行生成算法的计算方案")
100
+ return self.run(job=job, name=name)
101
+
102
+ def runESS(self,job=None,name=None, **kwargs)->Runner[IESResult]:
103
+ '''
104
+ 运行 储能规划方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
83
105
 
84
106
  :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
85
107
  :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
86
108
 
87
109
  :return: runner Runner[IESResult]
88
110
  '''
111
+ rid = 'function/CloudPSS/ieslab-energy-storage-plan'
89
112
  if job is None:
90
113
  currentJob = self.model.context['currentJob']
91
114
  job = self.model.jobs[currentJob]
92
- if job['rid'] != 'job-definition/ies/ies-load-prediction':
115
+ if job['rid'] != rid:
93
116
  for j in self.model.jobs:
94
- if j['rid'] == 'job-definition/ies/ies-load-prediction':
117
+ if j['rid'] == rid:
95
118
  job = j
96
119
  if job is None:
97
- raise Exception("找不到负荷预测方案内核运行的计算方案")
98
- if job['rid'] != 'job-definition/ies/ies-load-prediction':
99
- raise Exception("不是负荷预测方案内核运行生成算法的计算方案")
120
+ raise Exception("找不到储能规划方案内核运行的计算方案")
121
+ if job['rid'] != rid:
122
+ raise Exception("不是储能规划方案内核运行生成算法的计算方案")
123
+ return self.run(job=job, name=name)
124
+
125
+ def runShortCurrent(self,job=None,name=None, **kwargs)->Runner[IESResult]:
126
+ '''
127
+ 运行 短路电流计算 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
128
+
129
+ :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
130
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
131
+
132
+ :return: runner Runner[IESResult]
133
+ '''
134
+ rid = 'function/CloudPSS/short-circuit-current-calculation'
135
+ if job is None:
136
+ currentJob = self.model.context['currentJob']
137
+ job = self.model.jobs[currentJob]
138
+ if job['rid'] != rid:
139
+ for j in self.model.jobs:
140
+ if j['rid'] == rid:
141
+ job = j
142
+ if job is None:
143
+ raise Exception("找不到短路电流计算方案内核运行的计算方案")
144
+ if job['rid'] != rid:
145
+ raise Exception("不是短路电流计算方案内核运行生成算法的计算方案")
100
146
  return self.run(job=job, name=name)
101
147
 
102
- def runIESPowerFlow(self,job=None,name=None, **kwargs)->Runner[IESResult]:
148
+ def runReliability(self,job=None,name=None, **kwargs)->Runner[IESResult]:
103
149
  '''
104
- 运行 时序潮流方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
150
+ 运行 可靠性分析 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
105
151
 
106
152
  :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
107
153
  :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
108
154
 
109
155
  :return: runner Runner[IESResult]
110
156
  '''
157
+ rid = 'function/CloudPSS/reliability-calculation'
111
158
  if job is None:
112
159
  currentJob = self.model.context['currentJob']
113
160
  job = self.model.jobs[currentJob]
114
- if job['rid'] != 'job-definition/ies/ies-power-flow':
161
+ if job['rid'] != rid:
115
162
  for j in self.model.jobs:
116
- if j['rid'] == 'job-definition/ies/ies-power-flow':
163
+ if j['rid'] == rid:
117
164
  job = j
118
165
  if job is None:
119
- raise Exception("找不到时序潮流方案内核运行的计算方案")
120
- if job['rid'] != 'job-definition/ies/ies-power-flow':
121
- raise Exception("不是时序潮流方案内核运行生成算法的计算方案")
166
+ raise Exception("找不到可靠性分析计算方案内核运行的计算方案")
167
+ if job['rid'] != rid:
168
+ raise Exception("不是可靠性分析计算方案内核运行生成算法的计算方案")
122
169
  return self.run(job=job, name=name)
170
+
171
+ def runStaticAnalysis(self,job=None,name=None, **kwargs)->Runner[IESResult]:
172
+ '''
173
+ 运行 静态安全性分析 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
174
+
175
+ :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
176
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
123
177
 
124
- def runIESEnergyStoragePlan(self,job=None,name=None, **kwargs)->Runner[IESResult]:
178
+ :return: runner Runner[IESResult]
125
179
  '''
126
- 运行 储能规划方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
180
+ rid = 'function/CloudPSS/static-security-analysis'
181
+ if job is None:
182
+ currentJob = self.model.context['currentJob']
183
+ job = self.model.jobs[currentJob]
184
+ if job['rid'] != rid:
185
+ for j in self.model.jobs:
186
+ if j['rid'] == rid:
187
+ job = j
188
+ if job is None:
189
+ raise Exception("找不到静态安全性分析计算方案内核运行的计算方案")
190
+ if job['rid'] != rid:
191
+ raise Exception("不是静态安全性分析计算方案内核运行生成算法的计算方案")
192
+ return self.run(job=job, name=name)
193
+
194
+ def runRPO(self,job=None,name=None, **kwargs)->Runner[IESResult]:
195
+ '''
196
+ 运行 无功优化 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
127
197
 
128
198
  :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
129
199
  :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
130
200
 
131
201
  :return: runner Runner[IESResult]
132
202
  '''
203
+ rid = 'function/CloudPSS/reactive-power-optimization'
133
204
  if job is None:
134
205
  currentJob = self.model.context['currentJob']
135
206
  job = self.model.jobs[currentJob]
136
- if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
207
+ if job['rid'] != rid:
137
208
  for j in self.model.jobs:
138
- if j['rid'] == 'job-definition/ies/ies-energy-storage-plan':
209
+ if j['rid'] == rid:
139
210
  job = j
140
211
  if job is None:
141
- raise Exception("找不到储能规划方案内核运行的计算方案")
142
- if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
143
- raise Exception("不是储能规划方案内核运行生成算法的计算方案")
212
+ raise Exception("找不到无功优化计算方案内核运行的计算方案")
213
+ if job['rid'] != rid:
214
+ raise Exception("不是无功优化计算方案内核运行生成算法的计算方案")
215
+ return self.run(job=job, name=name)
216
+
217
+ def runLoadForecast(self,job=None,name=None, **kwargs)->Runner[IESResult]:
218
+ '''
219
+ 运行 负荷预测方案 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
220
+
221
+ :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
222
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
223
+
224
+ :return: runner Runner[IESResult]
225
+ '''
226
+ rid = 'function/CloudPSS/ieslab-load-prediction'
227
+ if job is None:
228
+ currentJob = self.model.context['currentJob']
229
+ job = self.model.jobs[currentJob]
230
+ if job['rid'] != rid:
231
+ for j in self.model.jobs:
232
+ if j['rid'] == rid:
233
+ job = j
234
+ if job is None:
235
+ raise Exception("找不到负荷预测方案内核运行的计算方案")
236
+ if job['rid'] != rid:
237
+ raise Exception("不是负荷预测方案内核运行生成算法的计算方案")
144
238
  return self.run(job=job, name=name)
145
239
 
146
240
  @staticmethod