cloudpss 4.5.13__py3-none-any.whl → 4.5.15__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.
cloudpss/__init__.py CHANGED
@@ -9,10 +9,11 @@ from . import function
9
9
  from .job import Job
10
10
  from .function import FunctionExecution
11
11
  from .version import __version__
12
+ from .dslab import DSLab
12
13
  __all__ = [
13
14
  'setToken', 'Model', 'ModelRevision', 'ModelTopology', 'Runner', 'Result',
14
15
  'PowerFlowResult', 'EMTResult', 'MatlabDataEncoder', 'DateTimeEncode',
15
- 'function', 'Project', 'currentJob', 'IESLabSimulation', 'IESLabPlan','IESLabOpt','__version__','Job'
16
+ 'function', 'Project', 'currentJob', 'IESLabSimulation', 'IESLabPlan','IESLabOpt','__version__','Job','DSLab'
16
17
  ]
17
18
 
18
19
 
@@ -125,7 +125,6 @@ class DataManageModel(object):
125
125
  assert (dataType in self._kindNameMap
126
126
  or dataType in self._kindUrlMap), "数据类型不存在"
127
127
  kind = self._kindNameMap.get(dataType, dataType)
128
- print(kind)
129
128
  return copy.deepcopy(self._kindItemDataMap[kind])
130
129
 
131
130
  def AddDataItem(self, dataType, data):
@@ -496,6 +495,7 @@ class IESOptDataManageModel(DataManageModel):
496
495
  "储氨罐": "AmmoniaStoTank",
497
496
  "制氮设备": "NitrogenProduction",
498
497
  "氨负荷": "ammoniaLoad",
498
+ "氨": "Ammonia",
499
499
  }
500
500
  _kindUrlMap = {
501
501
  "PhotovoltaicSys": "api/ieslab-opt/rest/dpcs/",
@@ -546,5 +546,6 @@ class IESOptDataManageModel(DataManageModel):
546
546
  "AmmoniaStoTank": "api/ieslab-opt/rest/escs/",
547
547
  "NitrogenProduction": "api/ieslab-opt/rest/asec/",
548
548
  "ammoniaLoad": "api/ieslab-opt/rest/ammoniaLoad/",
549
+ "Ammonia": "api/ieslab-opt/rest/ammonia/",
549
550
  }
550
551
  pass
@@ -1,235 +1,236 @@
1
- import json
2
-
3
- from cloudpss.ieslab.DataManageModel import IESOptDataManageModel
4
- from cloudpss.ieslab.EvaluationModel import IESLabOptEvaluationModel
5
- from cloudpss.ieslab.PlanModel import IESLabOptModel
6
- from cloudpss.runner.IESLabTypicalDayResult import IESLabTypicalDayResult
7
- from ..utils import request
8
- from ..model.model import Model
9
- from cloudpss.runner.runner import Runner
10
- from cloudpss.runner.IESLabPlanResult import IESLabOptResult
11
- from cloudpss.runner.IESLabEvaluationResult import IESLabOptEvaluationResult
12
-
13
- class IESLabOpt(object):
14
- def __init__(self, project={}):
15
- '''
16
- 初始化
17
- '''
18
- self.id = project.get('id', None)
19
- self.name = project.get('name', None)
20
- self.__modelRid = project.get('model', None)
21
- self.project_group = project.get('project_group', None)
22
- self.start_date = project.get('start_date', None)
23
- self.end_date = project.get('end_date', None)
24
- if self.__modelRid is not None:
25
- self.model = Model.fetch(self.__modelRid)
26
- self.dataManageModel = IESOptDataManageModel(self.id)
27
- self.planModel = IESLabOptModel(self.id, self.model.rid)
28
- self.evaluationModel = IESLabOptEvaluationModel(self.id)
29
- self.currentPlanResult = IESLabOptResult(self.id)
30
- self.currentEvaluationResult = IESLabOptEvaluationResult(self.id)
31
-
32
- @staticmethod
33
- def fetch(simulationId):
34
- '''
35
- 获取算例信息
36
-
37
- :params: simulationId string类型,代表数据项的算例id
38
-
39
- :return: IESLabOpt
40
- '''
41
- try:
42
- r = request('GET',
43
- 'api/ieslab-opt/rest/simu/{0}/'.format(simulationId))
44
- project = json.loads(r.text)
45
- return IESLabOpt(project)
46
- except:
47
- raise Exception('未查询到当前算例')
48
-
49
- def __run(self, job=None, name=None):
50
- '''
51
- 调用仿真
52
-
53
- :params job: 调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
54
- :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
55
-
56
- :return: 返回一个运行实例
57
- '''
58
- if job is None:
59
- currentJob = self.model.context['currentJob']
60
- job = self.model.jobs[currentJob]
61
- job['args']['simulationId'] = self.id
62
- return self.model.run(job, name=name)
63
-
64
- def iesLabTypicalDayRun(self, job=None, name=None, **kwargs)->Runner[IESLabTypicalDayResult]:
65
- '''
66
- 运行典型日计算
67
-
68
- :params job: 调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
69
- :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
70
-
71
- :return: Runner[IESLabTypicalDayResult]
72
- '''
73
- if job is None:
74
- currentJob = self.model.context['currentJob']
75
- job = self.model.jobs[currentJob]
76
- if job['rid'] != 'function/CloudPSS/ieslab-gmm-opt':
77
- for j in self.model.jobs:
78
- if j['rid'] == 'job-definition/ies/ies-gmm-opt' or j['rid'] == 'job-definition/cloudpss/ieslab-gmm-opt':
79
- j['rid'] = 'function/CloudPSS/ieslab-gmm-opt'
80
- job = j
81
- if job is None:
82
- raise Exception("找不到默认的综合能源系统规划典型日生成算法的计算方案")
83
- if job['rid'] != 'function/CloudPSS/ieslab-gmm-opt':
84
- raise Exception("不是综合能源系统规划典型日生成算法的计算方案")
85
- return self.__run(job=job, name=name)
86
-
87
- def iesLabEvaluationRun(self, planId, type=None):
88
- '''
89
- 运行方案评估
90
-
91
- :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
92
- :param type string类型,表示评估类型,可选值为:能效评价、环保评价
93
-
94
- :return: 方案评估运行实例
95
-
96
- '''
97
- return self.evaluationModel.run(planId, type)
98
-
99
- def iesLabEnergyEvaluationRun(self, planId):
100
- '''
101
- 运行能效评价
102
-
103
- :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
104
-
105
- :return: 能效评价运行实例
106
-
107
- '''
108
- return self.evaluationModel.EnergyEvaluationRun(planId)
109
-
110
- def iesLabEnvironmentalEvaluationRun(self, planId):
111
- '''
112
- 运行环保评价
113
-
114
- :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
115
-
116
- :return: 环保评价运行实例
117
- '''
118
- return self.evaluationModel.EnvironmentalEvaluationRun(planId)
119
-
120
- def iesLabOptRun(self):
121
- '''
122
- 生成方案优选算例
123
-
124
- :return: 方案优选运行实例
125
- '''
126
- return self.planModel.run()
127
-
128
- def iesLabOptKill(self):
129
- '''
130
- 停止并删除方案优选算例
131
-
132
- :return: Boolean
133
- '''
134
- return self.planModel.kill()
135
-
136
- def createProjectGroup(self, name):
137
- '''
138
- 创建项目组
139
-
140
- :params name: 项目组名称
141
-
142
- :return: 返回一个创建的项目组
143
- '''
144
-
145
- @staticmethod
146
- def createProjectGroup(group_name, desc=None, createById=None):
147
- '''
148
- 创建项目组
149
-
150
- :params group_name: String 项目组名称
151
- :params desc: String 项目组描述 可选参数
152
- :params createById Int 父项目组id 可选参数,如果是从已有项目组导入的项目组,必填此项
153
-
154
- :return: Int 返回创建的项目组id
155
- '''
156
- try:
157
- if createById is None:
158
- isImport = 0
159
- else:
160
- isImport = 1
161
- payload = {
162
- 'group_name': group_name,
163
- 'desc': desc,
164
- 'isImport': isImport,
165
- 'createById': createById,
166
- }
167
- r = request(
168
- 'POST', 'api/ieslab-opt/rest/projectgroup/', data=json.dumps(payload))
169
- project = json.loads(r.text)
170
- return project.get('id', None)
171
- except Exception as e:
172
- raise Exception('创建项目组失败')
173
-
174
- @staticmethod
175
- def createProject(name, project_group, start_date, end_date, construction_cycle, desc=None, createById=None):
176
- '''
177
- 创建项目
178
-
179
- :params name: String 项目名称
180
- :params project_group: Int 父项目组id
181
- :param start_date: Int 项目开始年限,范围在[1500,3000]之间
182
- :param end_date: Int 项目结束年限,范围在项目开始时间之后且不超过五十年
183
- :param construction_cycle: Int 项目建设周期(年), 必须小于等于 项目结束年限 - 项目开始年限
184
- :params desc: String 项目描述, 可选参数
185
- :params createById Int 父项目id, 可选参数, 如果是从已有项目导入的项目,必填此项
186
-
187
- :return: Int 返回创建的项目id
188
- '''
189
- try:
190
- if start_date < 1500 or start_date > 3000:
191
- raise Exception('项目开始年限错误,范围在[1500,3000]之间')
192
- if end_date < start_date or end_date > start_date + 50:
193
- raise Exception('项目结束年限错误,范围在项目开始时间之后且不超过五十年')
194
- if construction_cycle > end_date - start_date:
195
- raise Exception('项目建设周期错误,必须小于等于 项目结束年限 - 项目开始年限')
196
- if createById is None:
197
- payload = {
198
- 'name': name,
199
- 'project_group': project_group,
200
- 'start_date': start_date,
201
- 'end_date': end_date,
202
- 'construction_cycle': construction_cycle,
203
- 'desc': desc
204
- }
205
- else:
206
- payload = {
207
- 'name': name,
208
- 'project_group': project_group,
209
- 'start_date': start_date,
210
- 'end_date': end_date,
211
- 'construction_cycle': construction_cycle,
212
- 'desc': desc,
213
- 'createById': createById
214
- }
215
- r = request(
216
- 'POST', 'api/ieslab-opt/rest/simu/', data=json.dumps(payload))
217
- project = json.loads(r.text)
218
- return project.get('id', None)
219
- except Exception as e:
220
- raise Exception('创建项目失败')
221
-
222
-
223
- @staticmethod
224
- def getProjectList():
225
- '''
226
- 获取项目组列表
227
-
228
- :return: 返回项目组列表
229
- '''
230
- try:
231
- r = request('GET', 'api/ieslab-opt/rest/projectgroup/?mode=simu')
232
- project = json.loads(r.text)
233
- return project
234
- except Exception as e:
1
+ import json
2
+
3
+ from cloudpss.ieslab.DataManageModel import IESOptDataManageModel
4
+ from cloudpss.ieslab.EvaluationModel import IESLabOptEvaluationModel
5
+ from cloudpss.ieslab.PlanModel import IESLabOptModel
6
+ # from cloudpss.runner.IESLabTypicalDayResult import IESLabTypicalDayResult
7
+ from ..utils import request
8
+ from ..model.model import Model
9
+ from cloudpss.runner.runner import Runner
10
+ from cloudpss.runner.IESLabPlanResult import IESLabOptResult
11
+ from cloudpss.runner.IESLabEvaluationResult import IESLabOptEvaluationResult
12
+ from cloudpss.job.result.IESLabTypicalDayResult import IESLabTypicalDayResult
13
+
14
+ class IESLabOpt(object):
15
+ def __init__(self, project={}):
16
+ '''
17
+ 初始化
18
+ '''
19
+ self.id = project.get('id', None)
20
+ self.name = project.get('name', None)
21
+ self.__modelRid = project.get('model', None)
22
+ self.project_group = project.get('project_group', None)
23
+ self.start_date = project.get('start_date', None)
24
+ self.end_date = project.get('end_date', None)
25
+ if self.__modelRid is not None:
26
+ self.model = Model.fetch(self.__modelRid)
27
+ self.dataManageModel = IESOptDataManageModel(self.id)
28
+ self.planModel = IESLabOptModel(self.id, self.model.rid)
29
+ self.evaluationModel = IESLabOptEvaluationModel(self.id)
30
+ self.currentPlanResult = IESLabOptResult(self.id)
31
+ self.currentEvaluationResult = IESLabOptEvaluationResult(self.id)
32
+
33
+ @staticmethod
34
+ def fetch(simulationId):
35
+ '''
36
+ 获取算例信息
37
+
38
+ :params: simulationId string类型,代表数据项的算例id
39
+
40
+ :return: IESLabOpt
41
+ '''
42
+ try:
43
+ r = request('GET',
44
+ 'api/ieslab-opt/rest/simu/{0}/'.format(simulationId))
45
+ project = json.loads(r.text)
46
+ return IESLabOpt(project)
47
+ except:
48
+ raise Exception('未查询到当前算例')
49
+
50
+ def __run(self, job=None, name=None):
51
+ '''
52
+ 调用仿真
53
+
54
+ :params job: 调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
55
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
56
+
57
+ :return: 返回一个运行实例
58
+ '''
59
+ if job is None:
60
+ currentJob = self.model.context['currentJob']
61
+ job = self.model.jobs[currentJob]
62
+ job['args']['simulationId'] = self.id
63
+ return self.model.run(job, name=name)
64
+
65
+ def iesLabTypicalDayRun(self, job=None, name=None, **kwargs)-> Runner[IESLabTypicalDayResult]:
66
+ '''
67
+ 运行典型日计算
68
+
69
+ :params job: 调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
70
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
71
+
72
+ :return: Runner[IESLabTypicalDayResult]
73
+ '''
74
+ if job is None:
75
+ currentJob = self.model.context['currentJob']
76
+ job = self.model.jobs[currentJob]
77
+ if job['rid'] != 'function/CloudPSS/ieslab-gmm-opt':
78
+ for j in self.model.jobs:
79
+ if j['rid'] == 'job-definition/ies/ies-gmm-opt' or j['rid'] == 'job-definition/cloudpss/ieslab-gmm-opt':
80
+ j['rid'] = 'function/CloudPSS/ieslab-gmm-opt'
81
+ job = j
82
+ if job is None:
83
+ raise Exception("找不到默认的综合能源系统规划典型日生成算法的计算方案")
84
+ if job['rid'] != 'function/CloudPSS/ieslab-gmm-opt':
85
+ raise Exception("不是综合能源系统规划典型日生成算法的计算方案")
86
+ return self.__run(job=job, name=name)
87
+
88
+ def iesLabEvaluationRun(self, planId, type=None):
89
+ '''
90
+ 运行方案评估
91
+
92
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
93
+ :param type string类型,表示评估类型,可选值为:能效评价、环保评价
94
+
95
+ :return: 方案评估运行实例
96
+
97
+ '''
98
+ return self.evaluationModel.run(planId, type)
99
+
100
+ def iesLabEnergyEvaluationRun(self, planId):
101
+ '''
102
+ 运行能效评价
103
+
104
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
105
+
106
+ :return: 能效评价运行实例
107
+
108
+ '''
109
+ return self.evaluationModel.EnergyEvaluationRun(planId)
110
+
111
+ def iesLabEnvironmentalEvaluationRun(self, planId):
112
+ '''
113
+ 运行环保评价
114
+
115
+ :param planID int类型,表示优化方案的ID,数值位于0~优化方案数量之间
116
+
117
+ :return: 环保评价运行实例
118
+ '''
119
+ return self.evaluationModel.EnvironmentalEvaluationRun(planId)
120
+
121
+ def iesLabOptRun(self):
122
+ '''
123
+ 生成方案优选算例
124
+
125
+ :return: 方案优选运行实例
126
+ '''
127
+ return self.planModel.run()
128
+
129
+ def iesLabOptKill(self):
130
+ '''
131
+ 停止并删除方案优选算例
132
+
133
+ :return: Boolean
134
+ '''
135
+ return self.planModel.kill()
136
+
137
+ def createProjectGroup(self, name):
138
+ '''
139
+ 创建项目组
140
+
141
+ :params name: 项目组名称
142
+
143
+ :return: 返回一个创建的项目组
144
+ '''
145
+
146
+ @staticmethod
147
+ def createProjectGroup(group_name, desc=None, createById=None):
148
+ '''
149
+ 创建项目组
150
+
151
+ :params group_name: String 项目组名称
152
+ :params desc: String 项目组描述 可选参数
153
+ :params createById Int 父项目组id 可选参数,如果是从已有项目组导入的项目组,必填此项
154
+
155
+ :return: Int 返回创建的项目组id
156
+ '''
157
+ try:
158
+ if createById is None:
159
+ isImport = 0
160
+ else:
161
+ isImport = 1
162
+ payload = {
163
+ 'group_name': group_name,
164
+ 'desc': desc,
165
+ 'isImport': isImport,
166
+ 'createById': createById,
167
+ }
168
+ r = request(
169
+ 'POST', 'api/ieslab-opt/rest/projectgroup/', data=json.dumps(payload))
170
+ project = json.loads(r.text)
171
+ return project.get('id', None)
172
+ except Exception as e:
173
+ raise Exception('创建项目组失败')
174
+
175
+ @staticmethod
176
+ def createProject(name, project_group, start_date, end_date, construction_cycle, desc=None, createById=None):
177
+ '''
178
+ 创建项目
179
+
180
+ :params name: String 项目名称
181
+ :params project_group: Int 父项目组id
182
+ :param start_date: Int 项目开始年限,范围在[1500,3000]之间
183
+ :param end_date: Int 项目结束年限,范围在项目开始时间之后且不超过五十年
184
+ :param construction_cycle: Int 项目建设周期(年), 必须小于等于 项目结束年限 - 项目开始年限
185
+ :params desc: String 项目描述, 可选参数
186
+ :params createById Int 父项目id, 可选参数, 如果是从已有项目导入的项目,必填此项
187
+
188
+ :return: Int 返回创建的项目id
189
+ '''
190
+ try:
191
+ if start_date < 1500 or start_date > 3000:
192
+ raise Exception('项目开始年限错误,范围在[1500,3000]之间')
193
+ if end_date < start_date or end_date > start_date + 50:
194
+ raise Exception('项目结束年限错误,范围在项目开始时间之后且不超过五十年')
195
+ if construction_cycle > end_date - start_date:
196
+ raise Exception('项目建设周期错误,必须小于等于 项目结束年限 - 项目开始年限')
197
+ if createById is None:
198
+ payload = {
199
+ 'name': name,
200
+ 'project_group': project_group,
201
+ 'start_date': start_date,
202
+ 'end_date': end_date,
203
+ 'construction_cycle': construction_cycle,
204
+ 'desc': desc
205
+ }
206
+ else:
207
+ payload = {
208
+ 'name': name,
209
+ 'project_group': project_group,
210
+ 'start_date': start_date,
211
+ 'end_date': end_date,
212
+ 'construction_cycle': construction_cycle,
213
+ 'desc': desc,
214
+ 'createById': createById
215
+ }
216
+ r = request(
217
+ 'POST', 'api/ieslab-opt/rest/simu/', data=json.dumps(payload))
218
+ project = json.loads(r.text)
219
+ return project.get('id', None)
220
+ except Exception as e:
221
+ raise Exception('创建项目失败')
222
+
223
+
224
+ @staticmethod
225
+ def getProjectList():
226
+ '''
227
+ 获取项目组列表
228
+
229
+ :return: 返回项目组列表
230
+ '''
231
+ try:
232
+ r = request('GET', 'api/ieslab-opt/rest/projectgroup/?mode=simu')
233
+ project = json.loads(r.text)
234
+ return project
235
+ except Exception as e:
235
236
  raise Exception('获取项目组列表失败')
cloudpss/job/job.py CHANGED
@@ -65,6 +65,7 @@ class Job(Generic[T]):
65
65
  input,
66
66
  output,
67
67
  position,
68
+ **kwargs
68
69
  ):
69
70
  super(Job, self).__init__()
70
71
  self.id = id
@@ -84,9 +85,10 @@ class Job(Generic[T]):
84
85
  self.__receiver = None
85
86
  self.__sender = None
86
87
  self._result = None
88
+ self.baseUrl = kwargs.get("baseUrl", None)
87
89
 
88
90
  @staticmethod
89
- def fetch(id):
91
+ def fetch(id, **kwargs):
90
92
  """
91
93
  获取job信息
92
94
  """
@@ -94,11 +96,10 @@ class Job(Generic[T]):
94
96
  raise Exception("id is None")
95
97
 
96
98
  variables = {"_a": {"id": id}}
97
-
98
- r = graphql_request(Job.__jobQuery, variables)
99
+ r = graphql_request(Job.__jobQuery, variables,**kwargs)
99
100
  if "errors" in r:
100
101
  raise Exception(r["errors"])
101
- return Job(**r["data"]["job"])
102
+ return Job(**r["data"]["job"],**kwargs)
102
103
 
103
104
 
104
105
  # @staticmethod
@@ -162,7 +163,7 @@ class Job(Generic[T]):
162
163
  }
163
164
  return variables
164
165
  @staticmethod
165
- def create(revisionHash, job, config, name=None, rid=None, policy=None, **kwargs):
166
+ def create(revisionHash, job, config, name=None, rid=None, policy=None, **kwargs):
166
167
  """
167
168
  创建一个运行任务
168
169
 
@@ -177,11 +178,11 @@ class Job(Generic[T]):
177
178
  >>> runner = Runner.runRevision(revision,job,config,'')
178
179
  """
179
180
  variables=Job.__createJobVariables(job, config, revisionHash, rid=rid, policy=policy, **kwargs)
180
- r = graphql_request(Job.__createJobQuery, variables)
181
+ r = graphql_request(Job.__createJobQuery, variables,**kwargs)
181
182
  if "errors" in r:
182
183
  raise Exception(r["errors"])
183
184
  id = r["data"]["job"]["id"]
184
- return Job.fetch(id)
185
+ return Job.fetch(id,**kwargs)
185
186
 
186
187
 
187
188
 
@@ -202,7 +203,7 @@ class Job(Generic[T]):
202
203
  if receiver is not None:
203
204
  self.__receiver = receiver
204
205
  if self.__receiver is None:
205
- self.__receiver = MessageStreamReceiver(self)
206
+ self.__receiver = MessageStreamReceiver(self.output,baseUrl=self.baseUrl)
206
207
  self.__receiver.connect(**kwargs)
207
208
  return self.__receiver
208
209
 
@@ -216,7 +217,7 @@ class Job(Generic[T]):
216
217
  if sender is not None:
217
218
  self.__sender = sender
218
219
  if self.__sender is None:
219
- self.__sender = MessageStreamSender(self)
220
+ self.__sender = MessageStreamSender(self.input,baseUrl=self.baseUrl)
220
221
  self.__sender.connect_legacy(**kwargs)
221
222
  return self.__sender
222
223
 
@@ -259,11 +260,13 @@ class Job(Generic[T]):
259
260
  sender = self.write()
260
261
  if resultType is None:
261
262
  resultType = getResultClass(self.context[0])
262
- return resultType(receiver, sender)
263
+ self._result= resultType(receiver, sender)
264
+
265
+ return self._result
263
266
 
264
267
 
265
268
 
266
- def abort(self,timeout=3):
269
+ def abort(self,timeout=3,**kwargs):
267
270
  """
268
271
  中断当前运行实例
269
272
  """
@@ -276,8 +279,8 @@ class Job(Generic[T]):
276
279
  '''
277
280
  variables = {
278
281
  'input': {
279
- 'id': self.taskId,
282
+ 'id': self.id,
280
283
  'timeout': timeout
281
284
  }
282
285
  }
283
- graphql_request(query, variables)
286
+ graphql_request(query, variables,**kwargs)