ep-sdk-4pd 0.1.2__tar.gz → 0.1.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.
@@ -0,0 +1,225 @@
1
+ Metadata-Version: 2.1
2
+ Name: ep_sdk_4pd
3
+ Version: 0.1.3
4
+ Summary: 4paradigm Electricity Platform Service SDK Library for Python
5
+ Home-page: https://gitlab.4pd.io/electricityproject/electricity-platform-sdk
6
+ Author: 4paradigm Electricity Platform SDK
7
+ Author-email:
8
+ Keywords: 4pd_electricity_platform
9
+ Platform: any
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.6
14
+ Classifier: Programming Language :: Python :: 3.7
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Topic :: Software Development
19
+ Requires-Python: >=3.6
20
+ Description-Content-Type: text/markdown
21
+ Requires-Dist: requests
22
+
23
+ # SDK 帮助文档
24
+
25
+ 本说明文档旨在指导策略开发者如何使用平台提供的远程 SDK 仓库 `ep-sdk-4pd`,完成特征数据获取、模型开发与调试流程。
26
+
27
+ > ⚠️ ep-sdk-4pd SDK是平台为策略开发者提供的本地数据访问工具,用于访问结构化的示例数据,模拟真实环境中的策略开发流程。SDK 会自动识别运行环境,在本地开发时返回脱敏示例数据,结构与线上一致;在正式部署时连接真实数据库。
28
+
29
+ ## 一、SDK 安装方式
30
+
31
+ SDK 已托管于远程私有仓库,用户可通过以下命令在本地完成安装:
32
+
33
+ ```bash
34
+ pip install ep-sdk-4pd
35
+ ```
36
+
37
+ 安装成功后,策略脚本中可直接引入 SDK 提供的功能模块。
38
+
39
+ ## 二、模块导入方式
40
+
41
+ 平台策略执行环境中已预置 SDK 包 `ep-sdk-4pd`,用户在本地开发时可通过如下方式导入核心方法:
42
+
43
+ ```python
44
+ from ep_sdk_4pd.ep_system import EpSystem
45
+ from ep_sdk_4pd.ep_data import EpData
46
+ ```
47
+
48
+ ## 三、系统环境接口(EpSystem)
49
+
50
+ 系统接口统一封装于 `EpSystem` 类中,主要用于策略运行环境感知和训练/预测流程控制。
51
+
52
+ ### 3.1 模型输出路径:`EpSystem.model_output_dir()`
53
+
54
+ - **定义**:获取模型输出目录路径
55
+
56
+ - **线上环境返回**:`/home/{user}/strategyId/`
57
+
58
+ - **本地调试返回**:`/home/{user}/test/`
59
+
60
+ ### 3.2 获取系统时间:`EpSystem.get_system_date()`
61
+
62
+ - **定义**:获取平台运行时系统时间,作为训练或预测数据的参考时间基准。用户不可自定义修改。
63
+
64
+ - **本地调试返回**:固定测试值,如 `"2024-12-31"`
65
+
66
+ - **线上运行返回**:随运行时间变化,如 `"2025-04-01"`
67
+
68
+ ### 3.3 获取运行策略信息:`EpSystem.get_run_strategy()`
69
+
70
+ - **定义**:获取当前正在运行的策略上下文信息
71
+
72
+ - **返回示例(测试环境)**:
73
+
74
+ ```python
75
+ {
76
+ "id": 1,
77
+ "name": "空仓策略",
78
+ "description": "不参考任何信息,96节点全部报0",
79
+ "plant": "test站点",
80
+ "countyCode": 1000100
81
+ }
82
+ ```
83
+
84
+ ### 3.4 训练完成通知:`EpSystem.call_train_done()`
85
+
86
+ - **定义**:用于回调通知平台当前策略训练已完成。
87
+
88
+ - **默认行为**:调用时会自动读取当前运行策略 ID,用户无需传参。
89
+
90
+ - **返回值**:`True`(成功)或 `False`(失败)
91
+
92
+
93
+
94
+ ## 四、特征数据接口(EpData)
95
+
96
+ 数据接口封装于 `EpData` 类中,用于获取结构化输入数据,包括天气、市场、电厂等特征。数据按系统时间校验,不可穿越未来。
97
+
98
+ ### 4.1 数据获取规则
99
+
100
+ - 可获取数据时间段为:`2024-01-01 ~ 2024-12-31`
101
+
102
+ - 推理模拟从 `2025-01-01` 开始顺序执行
103
+
104
+ ### 4.2 获取历史数据:`EpData.get_history_data(scope: List[str], days: int)`
105
+
106
+ - **定义**:获取当前系统时间向前指定天数的数据(最晚支持到 D-2)
107
+
108
+ - **参数说明:**
109
+
110
+ - `scope`:选择数据模块,支持 `["weather", "plant", "market"]`
111
+
112
+ - `days`:获取当前系统时间前 N 天的数据
113
+
114
+ - **示例调用:**
115
+
116
+ ```python
117
+ from ep_sdk_4pd.ep_data import EpData
118
+
119
+ # 获取全量的历史特征
120
+ data = EpData.get_history_data(days=7)
121
+ # 获取天气的历史特征
122
+ weather_data = EpData.get_history_data(scope=["weather"], days=7)
123
+ ```
124
+
125
+ - **返回格式:**
126
+
127
+ ```python
128
+ data = {
129
+ "weather": pd.DataFrame(...),
130
+ "plant": pd.DataFrame(...),
131
+ "market": pd.DataFrame(...)
132
+ }
133
+ weather_data = {
134
+ "weather": pd.DataFrame(...)
135
+ }
136
+ ```
137
+
138
+ - **字段详解:**
139
+
140
+ - `market`:聚合电力交易市场相关信息,如价格、电量、调度负荷、联络线、新能源出力等
141
+
142
+ - `plant`:聚合特定发电场站相关运行指标,站点电价、电量等
143
+
144
+ - `weather`:聚合天气相关数据,如天气实况、未来预报、气象背景等
145
+
146
+ - 更多字段说明,请参考平台对应的「数据字典文档」。
147
+
148
+ ### 4.3 获取预测数据:`EpData.get_predict_data(scope: List[str])`
149
+
150
+ - **定义**:获取当前系统时间的预测数据(最晚为 D-1)
151
+
152
+ - **参数说明:**
153
+
154
+ - `scope`:可选数据范围,与 `get_history_data` 相同
155
+
156
+ - **示例调用:**
157
+
158
+ ```python
159
+ from ep_sdk_4pd.ep_data import EpData
160
+
161
+ # 获取市场和天气的预测特征
162
+ data = EpData.get_predict_data(scope=["market", "weather"])
163
+ ```
164
+
165
+ - **返回格式:**
166
+
167
+ ```python
168
+ data = {
169
+ "weather": pd.DataFrame(...),
170
+ "market": pd.DataFrame(...)
171
+ }
172
+ ```
173
+
174
+ ## 五、环境适配说明
175
+
176
+ - 本地调试环境下,SDK 返回脱敏示例数据,用于验证模型逻辑与调试开发流程。
177
+
178
+ - 部署上线后,SDK 自动连接真实数据库,返回真实交易场景中的数据。
179
+
180
+ - 开发者无需修改代码逻辑,环境判断与数据源切换由 SDK 内部自动处理。
181
+
182
+ ## 六、常见问题 FAQ
183
+
184
+ ### Q1:如何确定当前系统时间?
185
+
186
+ 可通过 `EpSystem.get_system_date()` 获取,格式为 `YYYY-MM-DD`。
187
+
188
+ ### Q2:为什么我的数据不包含最新日期?
189
+
190
+ `get_history_data` 返回最晚到系统时间的 D-2 日数据,`get_predict_data` 返回系统时间的 D-1 日预测数据。
191
+
192
+ ### Q3:模型训练完成后如何保存模型?
193
+
194
+ 平台会在运行策略时创建独立的模型输出目录(通过 `EpSystem.model_output_dir()` 获取),用于保存用户的模型对象或其他中间结果。
195
+
196
+ 建议使用常见的 Python 序列化方案保存模型,如:
197
+
198
+ **方式一:pickle 序列化(推荐用于简单对象)**
199
+
200
+ ```Python
201
+ import pickle
202
+ from ep_sdk_4pd.ep_system import EpSystem
203
+
204
+ out_dict = {"price_model": model1, "power_model": model2}
205
+ with open(f"{EpSystem.model_output_dir()}/model.pickle", "wb") as f:
206
+ pickle.dump(out_dict, f)
207
+ ```
208
+
209
+ **方式二:joblib 序列化(推荐用于大型模型)**
210
+
211
+ ```Python
212
+ from joblib import dump
213
+ from ep_sdk_4pd.ep_system import EpSystem
214
+
215
+ model_path = f"{EpSystem.model_output_dir()}/model.joblib"
216
+ dump(your_model, model_path)
217
+ ```
218
+
219
+ **方式三:自定义格式存储(如 JSON/CSV/HDF5 等)** 对于不适合直接 pickle 的模型(如深度学习框架模型、含依赖项对象),也可通过保存权重、参数配置等方式进行落盘。
220
+
221
+ ### Q4:如何判断当前策略运行上下文?
222
+
223
+ 通过 `EpSystem.get_run_strategy()` 可获取策略 ID、配置等元信息,便于调试和日志输出。
224
+
225
+ 如需获取最新数据字段说明、SDK 更新日志或接口文档,请前往平台「数据文档中心」或联系管理员。
@@ -0,0 +1,203 @@
1
+ # SDK 帮助文档
2
+
3
+ 本说明文档旨在指导策略开发者如何使用平台提供的远程 SDK 仓库 `ep-sdk-4pd`,完成特征数据获取、模型开发与调试流程。
4
+
5
+ > ⚠️ ep-sdk-4pd SDK是平台为策略开发者提供的本地数据访问工具,用于访问结构化的示例数据,模拟真实环境中的策略开发流程。SDK 会自动识别运行环境,在本地开发时返回脱敏示例数据,结构与线上一致;在正式部署时连接真实数据库。
6
+
7
+ ## 一、SDK 安装方式
8
+
9
+ SDK 已托管于远程私有仓库,用户可通过以下命令在本地完成安装:
10
+
11
+ ```bash
12
+ pip install ep-sdk-4pd
13
+ ```
14
+
15
+ 安装成功后,策略脚本中可直接引入 SDK 提供的功能模块。
16
+
17
+ ## 二、模块导入方式
18
+
19
+ 平台策略执行环境中已预置 SDK 包 `ep-sdk-4pd`,用户在本地开发时可通过如下方式导入核心方法:
20
+
21
+ ```python
22
+ from ep_sdk_4pd.ep_system import EpSystem
23
+ from ep_sdk_4pd.ep_data import EpData
24
+ ```
25
+
26
+ ## 三、系统环境接口(EpSystem)
27
+
28
+ 系统接口统一封装于 `EpSystem` 类中,主要用于策略运行环境感知和训练/预测流程控制。
29
+
30
+ ### 3.1 模型输出路径:`EpSystem.model_output_dir()`
31
+
32
+ - **定义**:获取模型输出目录路径
33
+
34
+ - **线上环境返回**:`/home/{user}/strategyId/`
35
+
36
+ - **本地调试返回**:`/home/{user}/test/`
37
+
38
+ ### 3.2 获取系统时间:`EpSystem.get_system_date()`
39
+
40
+ - **定义**:获取平台运行时系统时间,作为训练或预测数据的参考时间基准。用户不可自定义修改。
41
+
42
+ - **本地调试返回**:固定测试值,如 `"2024-12-31"`
43
+
44
+ - **线上运行返回**:随运行时间变化,如 `"2025-04-01"`
45
+
46
+ ### 3.3 获取运行策略信息:`EpSystem.get_run_strategy()`
47
+
48
+ - **定义**:获取当前正在运行的策略上下文信息
49
+
50
+ - **返回示例(测试环境)**:
51
+
52
+ ```python
53
+ {
54
+ "id": 1,
55
+ "name": "空仓策略",
56
+ "description": "不参考任何信息,96节点全部报0",
57
+ "plant": "test站点",
58
+ "countyCode": 1000100
59
+ }
60
+ ```
61
+
62
+ ### 3.4 训练完成通知:`EpSystem.call_train_done()`
63
+
64
+ - **定义**:用于回调通知平台当前策略训练已完成。
65
+
66
+ - **默认行为**:调用时会自动读取当前运行策略 ID,用户无需传参。
67
+
68
+ - **返回值**:`True`(成功)或 `False`(失败)
69
+
70
+
71
+
72
+ ## 四、特征数据接口(EpData)
73
+
74
+ 数据接口封装于 `EpData` 类中,用于获取结构化输入数据,包括天气、市场、电厂等特征。数据按系统时间校验,不可穿越未来。
75
+
76
+ ### 4.1 数据获取规则
77
+
78
+ - 可获取数据时间段为:`2024-01-01 ~ 2024-12-31`
79
+
80
+ - 推理模拟从 `2025-01-01` 开始顺序执行
81
+
82
+ ### 4.2 获取历史数据:`EpData.get_history_data(scope: List[str], days: int)`
83
+
84
+ - **定义**:获取当前系统时间向前指定天数的数据(最晚支持到 D-2)
85
+
86
+ - **参数说明:**
87
+
88
+ - `scope`:选择数据模块,支持 `["weather", "plant", "market"]`
89
+
90
+ - `days`:获取当前系统时间前 N 天的数据
91
+
92
+ - **示例调用:**
93
+
94
+ ```python
95
+ from ep_sdk_4pd.ep_data import EpData
96
+
97
+ # 获取全量的历史特征
98
+ data = EpData.get_history_data(days=7)
99
+ # 获取天气的历史特征
100
+ weather_data = EpData.get_history_data(scope=["weather"], days=7)
101
+ ```
102
+
103
+ - **返回格式:**
104
+
105
+ ```python
106
+ data = {
107
+ "weather": pd.DataFrame(...),
108
+ "plant": pd.DataFrame(...),
109
+ "market": pd.DataFrame(...)
110
+ }
111
+ weather_data = {
112
+ "weather": pd.DataFrame(...)
113
+ }
114
+ ```
115
+
116
+ - **字段详解:**
117
+
118
+ - `market`:聚合电力交易市场相关信息,如价格、电量、调度负荷、联络线、新能源出力等
119
+
120
+ - `plant`:聚合特定发电场站相关运行指标,站点电价、电量等
121
+
122
+ - `weather`:聚合天气相关数据,如天气实况、未来预报、气象背景等
123
+
124
+ - 更多字段说明,请参考平台对应的「数据字典文档」。
125
+
126
+ ### 4.3 获取预测数据:`EpData.get_predict_data(scope: List[str])`
127
+
128
+ - **定义**:获取当前系统时间的预测数据(最晚为 D-1)
129
+
130
+ - **参数说明:**
131
+
132
+ - `scope`:可选数据范围,与 `get_history_data` 相同
133
+
134
+ - **示例调用:**
135
+
136
+ ```python
137
+ from ep_sdk_4pd.ep_data import EpData
138
+
139
+ # 获取市场和天气的预测特征
140
+ data = EpData.get_predict_data(scope=["market", "weather"])
141
+ ```
142
+
143
+ - **返回格式:**
144
+
145
+ ```python
146
+ data = {
147
+ "weather": pd.DataFrame(...),
148
+ "market": pd.DataFrame(...)
149
+ }
150
+ ```
151
+
152
+ ## 五、环境适配说明
153
+
154
+ - 本地调试环境下,SDK 返回脱敏示例数据,用于验证模型逻辑与调试开发流程。
155
+
156
+ - 部署上线后,SDK 自动连接真实数据库,返回真实交易场景中的数据。
157
+
158
+ - 开发者无需修改代码逻辑,环境判断与数据源切换由 SDK 内部自动处理。
159
+
160
+ ## 六、常见问题 FAQ
161
+
162
+ ### Q1:如何确定当前系统时间?
163
+
164
+ 可通过 `EpSystem.get_system_date()` 获取,格式为 `YYYY-MM-DD`。
165
+
166
+ ### Q2:为什么我的数据不包含最新日期?
167
+
168
+ `get_history_data` 返回最晚到系统时间的 D-2 日数据,`get_predict_data` 返回系统时间的 D-1 日预测数据。
169
+
170
+ ### Q3:模型训练完成后如何保存模型?
171
+
172
+ 平台会在运行策略时创建独立的模型输出目录(通过 `EpSystem.model_output_dir()` 获取),用于保存用户的模型对象或其他中间结果。
173
+
174
+ 建议使用常见的 Python 序列化方案保存模型,如:
175
+
176
+ **方式一:pickle 序列化(推荐用于简单对象)**
177
+
178
+ ```Python
179
+ import pickle
180
+ from ep_sdk_4pd.ep_system import EpSystem
181
+
182
+ out_dict = {"price_model": model1, "power_model": model2}
183
+ with open(f"{EpSystem.model_output_dir()}/model.pickle", "wb") as f:
184
+ pickle.dump(out_dict, f)
185
+ ```
186
+
187
+ **方式二:joblib 序列化(推荐用于大型模型)**
188
+
189
+ ```Python
190
+ from joblib import dump
191
+ from ep_sdk_4pd.ep_system import EpSystem
192
+
193
+ model_path = f"{EpSystem.model_output_dir()}/model.joblib"
194
+ dump(your_model, model_path)
195
+ ```
196
+
197
+ **方式三:自定义格式存储(如 JSON/CSV/HDF5 等)** 对于不适合直接 pickle 的模型(如深度学习框架模型、含依赖项对象),也可通过保存权重、参数配置等方式进行落盘。
198
+
199
+ ### Q4:如何判断当前策略运行上下文?
200
+
201
+ 通过 `EpSystem.get_run_strategy()` 可获取策略 ID、配置等元信息,便于调试和日志输出。
202
+
203
+ 如需获取最新数据字段说明、SDK 更新日志或接口文档,请前往平台「数据文档中心」或联系管理员。
@@ -0,0 +1 @@
1
+ __version__ = '0.1.3'
@@ -1,25 +1,31 @@
1
1
  import json
2
+ from datetime import timedelta, datetime
2
3
 
3
4
  import requests
4
5
 
5
6
  from ep_sdk_4pd import models as ep_sdk_4pd_models
7
+ from ep_sdk_4pd.ep_system import EpSystem
6
8
  from ep_sdk_4pd.models import HistoryDataRequest, PredictDataRequest
7
9
 
8
10
  # test 地址
9
- endpoint = 'http://172.27.88.56:6001'
11
+ # endpoint = 'http://172.27.88.56:6001'
10
12
 
11
13
 
12
14
  # prod 地址
13
- # endpoint = 'http://82.157.231.254:6001'
15
+ endpoint = 'http://82.157.231.254:6001'
14
16
 
15
17
  class EpData:
16
18
 
17
19
  @staticmethod
18
20
  def get_history_data(
19
- scope,
20
- system_date,
21
- days
21
+ scope = None,
22
+ days = 0
22
23
  ):
24
+ # 最晚时间为系统时间 D-2
25
+ date_str = EpSystem.get_system_date(is_online=True)
26
+ calculated_date = datetime.strptime(date_str, "%Y-%m-%d") - timedelta(days=2)
27
+ system_date = calculated_date.strftime("%Y-%m-%d") # 转换回字符串
28
+
23
29
  request = HistoryDataRequest(
24
30
  scope=scope,
25
31
  system_date=system_date,
@@ -64,9 +70,13 @@ class EpData:
64
70
 
65
71
  @staticmethod
66
72
  def get_predict_data(
67
- scope,
68
- system_date
73
+ scope
69
74
  ):
75
+ # 最晚时间为系统时间 D-1
76
+ date_str = EpSystem.get_system_date(is_online=True)
77
+ calculated_date = datetime.strptime(date_str, "%Y-%m-%d") - timedelta(days=1)
78
+ system_date = calculated_date.strftime("%Y-%m-%d") # 转换回字符串
79
+
70
80
  request = PredictDataRequest(
71
81
  scope=scope,
72
82
  system_date=system_date,
@@ -7,14 +7,14 @@ import requests
7
7
  from ep_sdk_4pd import models as ep_sdk_4pd_models
8
8
  from datetime import datetime
9
9
 
10
- from ep_sdk_4pd.models import ModelOutputDirRequest, RunStrategyRequest
10
+ from ep_sdk_4pd.models import ModelOutputDirRequest, RunStrategyRequest, CallTrainDoneRequest
11
11
 
12
12
  # test 地址
13
- endpoint = 'http://172.27.88.56:6001'
13
+ # endpoint = 'http://172.27.88.56:6001'
14
14
 
15
15
 
16
16
  # prod 地址
17
- # endpoint = 'http://82.157.231.254:6001'
17
+ endpoint = 'http://82.157.231.254:6001'
18
18
 
19
19
  class EpSystem:
20
20
 
@@ -118,4 +118,38 @@ class EpSystem:
118
118
  if response.code == 200:
119
119
  return response.data
120
120
  else:
121
- return None
121
+ return None
122
+
123
+ @staticmethod
124
+ def call_train_done(strategy_id: int = None):
125
+ if strategy_id is None:
126
+ return False
127
+
128
+ request = CallTrainDoneRequest(strategy_id=strategy_id)
129
+ full_url = f'{endpoint}{request.api}'
130
+ headers = {
131
+ 'content-type': request.content_type,
132
+ }
133
+
134
+ payload = {
135
+ 'strategy_id': request.strategy_id
136
+ }
137
+
138
+ response = requests.request(
139
+ method=request.method,
140
+ url=full_url,
141
+ headers=headers,
142
+ data=json.dumps(payload),
143
+ )
144
+
145
+ base_resp = ep_sdk_4pd_models.BaseResponse(
146
+ code=response.json().get('code', None),
147
+ data=response.json().get('data', None),
148
+ message=response.json().get('message', None),
149
+ )
150
+ response = ep_sdk_4pd_models.CallTrainDoneResponse(response=base_resp)
151
+
152
+ if response.code == 200:
153
+ return True
154
+ else:
155
+ return False
@@ -162,6 +162,40 @@ class RunStrategyResponse(BaseResponse):
162
162
  Model for RunStrategyResponse
163
163
  """
164
164
 
165
+ def __init__(self, response: BaseResponse = None, **kwargs):
166
+ super().__init__(
167
+ code=response.code if response else None,
168
+ data=response.data if response else None,
169
+ message=response.message if response else None,
170
+ **kwargs,
171
+ )
172
+
173
+ class CallTrainDoneRequest(BaseRequest):
174
+ """
175
+ Model for CallTrainDoneRequest
176
+
177
+ 回调设置模型策略训练完成,考虑是框架层调用 还是 用户自由设定
178
+ 输入:无,默认为EpSystem.get_run_strategy()["id"]
179
+ """
180
+
181
+ def __init__(self, strategy_id: int = None):
182
+ """
183
+ Args:
184
+ strategy_id: 是否线上环境
185
+ """
186
+ self.strategy_id = strategy_id
187
+
188
+ super().__init__()
189
+ self.api = f'/ep/api/sdk/call_train_done'
190
+ self.method = 'POST'
191
+ self.content_type = 'application/json'
192
+
193
+
194
+ class CallTrainDoneResponse(BaseResponse):
195
+ """
196
+ Model for CallTrainDoneResponse
197
+ """
198
+
165
199
  def __init__(self, response: BaseResponse = None, **kwargs):
166
200
  super().__init__(
167
201
  code=response.code if response else None,
@@ -0,0 +1,225 @@
1
+ Metadata-Version: 2.1
2
+ Name: ep_sdk_4pd
3
+ Version: 0.1.3
4
+ Summary: 4paradigm Electricity Platform Service SDK Library for Python
5
+ Home-page: https://gitlab.4pd.io/electricityproject/electricity-platform-sdk
6
+ Author: 4paradigm Electricity Platform SDK
7
+ Author-email:
8
+ Keywords: 4pd_electricity_platform
9
+ Platform: any
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.6
14
+ Classifier: Programming Language :: Python :: 3.7
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Topic :: Software Development
19
+ Requires-Python: >=3.6
20
+ Description-Content-Type: text/markdown
21
+ Requires-Dist: requests
22
+
23
+ # SDK 帮助文档
24
+
25
+ 本说明文档旨在指导策略开发者如何使用平台提供的远程 SDK 仓库 `ep-sdk-4pd`,完成特征数据获取、模型开发与调试流程。
26
+
27
+ > ⚠️ ep-sdk-4pd SDK是平台为策略开发者提供的本地数据访问工具,用于访问结构化的示例数据,模拟真实环境中的策略开发流程。SDK 会自动识别运行环境,在本地开发时返回脱敏示例数据,结构与线上一致;在正式部署时连接真实数据库。
28
+
29
+ ## 一、SDK 安装方式
30
+
31
+ SDK 已托管于远程私有仓库,用户可通过以下命令在本地完成安装:
32
+
33
+ ```bash
34
+ pip install ep-sdk-4pd
35
+ ```
36
+
37
+ 安装成功后,策略脚本中可直接引入 SDK 提供的功能模块。
38
+
39
+ ## 二、模块导入方式
40
+
41
+ 平台策略执行环境中已预置 SDK 包 `ep-sdk-4pd`,用户在本地开发时可通过如下方式导入核心方法:
42
+
43
+ ```python
44
+ from ep_sdk_4pd.ep_system import EpSystem
45
+ from ep_sdk_4pd.ep_data import EpData
46
+ ```
47
+
48
+ ## 三、系统环境接口(EpSystem)
49
+
50
+ 系统接口统一封装于 `EpSystem` 类中,主要用于策略运行环境感知和训练/预测流程控制。
51
+
52
+ ### 3.1 模型输出路径:`EpSystem.model_output_dir()`
53
+
54
+ - **定义**:获取模型输出目录路径
55
+
56
+ - **线上环境返回**:`/home/{user}/strategyId/`
57
+
58
+ - **本地调试返回**:`/home/{user}/test/`
59
+
60
+ ### 3.2 获取系统时间:`EpSystem.get_system_date()`
61
+
62
+ - **定义**:获取平台运行时系统时间,作为训练或预测数据的参考时间基准。用户不可自定义修改。
63
+
64
+ - **本地调试返回**:固定测试值,如 `"2024-12-31"`
65
+
66
+ - **线上运行返回**:随运行时间变化,如 `"2025-04-01"`
67
+
68
+ ### 3.3 获取运行策略信息:`EpSystem.get_run_strategy()`
69
+
70
+ - **定义**:获取当前正在运行的策略上下文信息
71
+
72
+ - **返回示例(测试环境)**:
73
+
74
+ ```python
75
+ {
76
+ "id": 1,
77
+ "name": "空仓策略",
78
+ "description": "不参考任何信息,96节点全部报0",
79
+ "plant": "test站点",
80
+ "countyCode": 1000100
81
+ }
82
+ ```
83
+
84
+ ### 3.4 训练完成通知:`EpSystem.call_train_done()`
85
+
86
+ - **定义**:用于回调通知平台当前策略训练已完成。
87
+
88
+ - **默认行为**:调用时会自动读取当前运行策略 ID,用户无需传参。
89
+
90
+ - **返回值**:`True`(成功)或 `False`(失败)
91
+
92
+
93
+
94
+ ## 四、特征数据接口(EpData)
95
+
96
+ 数据接口封装于 `EpData` 类中,用于获取结构化输入数据,包括天气、市场、电厂等特征。数据按系统时间校验,不可穿越未来。
97
+
98
+ ### 4.1 数据获取规则
99
+
100
+ - 可获取数据时间段为:`2024-01-01 ~ 2024-12-31`
101
+
102
+ - 推理模拟从 `2025-01-01` 开始顺序执行
103
+
104
+ ### 4.2 获取历史数据:`EpData.get_history_data(scope: List[str], days: int)`
105
+
106
+ - **定义**:获取当前系统时间向前指定天数的数据(最晚支持到 D-2)
107
+
108
+ - **参数说明:**
109
+
110
+ - `scope`:选择数据模块,支持 `["weather", "plant", "market"]`
111
+
112
+ - `days`:获取当前系统时间前 N 天的数据
113
+
114
+ - **示例调用:**
115
+
116
+ ```python
117
+ from ep_sdk_4pd.ep_data import EpData
118
+
119
+ # 获取全量的历史特征
120
+ data = EpData.get_history_data(days=7)
121
+ # 获取天气的历史特征
122
+ weather_data = EpData.get_history_data(scope=["weather"], days=7)
123
+ ```
124
+
125
+ - **返回格式:**
126
+
127
+ ```python
128
+ data = {
129
+ "weather": pd.DataFrame(...),
130
+ "plant": pd.DataFrame(...),
131
+ "market": pd.DataFrame(...)
132
+ }
133
+ weather_data = {
134
+ "weather": pd.DataFrame(...)
135
+ }
136
+ ```
137
+
138
+ - **字段详解:**
139
+
140
+ - `market`:聚合电力交易市场相关信息,如价格、电量、调度负荷、联络线、新能源出力等
141
+
142
+ - `plant`:聚合特定发电场站相关运行指标,站点电价、电量等
143
+
144
+ - `weather`:聚合天气相关数据,如天气实况、未来预报、气象背景等
145
+
146
+ - 更多字段说明,请参考平台对应的「数据字典文档」。
147
+
148
+ ### 4.3 获取预测数据:`EpData.get_predict_data(scope: List[str])`
149
+
150
+ - **定义**:获取当前系统时间的预测数据(最晚为 D-1)
151
+
152
+ - **参数说明:**
153
+
154
+ - `scope`:可选数据范围,与 `get_history_data` 相同
155
+
156
+ - **示例调用:**
157
+
158
+ ```python
159
+ from ep_sdk_4pd.ep_data import EpData
160
+
161
+ # 获取市场和天气的预测特征
162
+ data = EpData.get_predict_data(scope=["market", "weather"])
163
+ ```
164
+
165
+ - **返回格式:**
166
+
167
+ ```python
168
+ data = {
169
+ "weather": pd.DataFrame(...),
170
+ "market": pd.DataFrame(...)
171
+ }
172
+ ```
173
+
174
+ ## 五、环境适配说明
175
+
176
+ - 本地调试环境下,SDK 返回脱敏示例数据,用于验证模型逻辑与调试开发流程。
177
+
178
+ - 部署上线后,SDK 自动连接真实数据库,返回真实交易场景中的数据。
179
+
180
+ - 开发者无需修改代码逻辑,环境判断与数据源切换由 SDK 内部自动处理。
181
+
182
+ ## 六、常见问题 FAQ
183
+
184
+ ### Q1:如何确定当前系统时间?
185
+
186
+ 可通过 `EpSystem.get_system_date()` 获取,格式为 `YYYY-MM-DD`。
187
+
188
+ ### Q2:为什么我的数据不包含最新日期?
189
+
190
+ `get_history_data` 返回最晚到系统时间的 D-2 日数据,`get_predict_data` 返回系统时间的 D-1 日预测数据。
191
+
192
+ ### Q3:模型训练完成后如何保存模型?
193
+
194
+ 平台会在运行策略时创建独立的模型输出目录(通过 `EpSystem.model_output_dir()` 获取),用于保存用户的模型对象或其他中间结果。
195
+
196
+ 建议使用常见的 Python 序列化方案保存模型,如:
197
+
198
+ **方式一:pickle 序列化(推荐用于简单对象)**
199
+
200
+ ```Python
201
+ import pickle
202
+ from ep_sdk_4pd.ep_system import EpSystem
203
+
204
+ out_dict = {"price_model": model1, "power_model": model2}
205
+ with open(f"{EpSystem.model_output_dir()}/model.pickle", "wb") as f:
206
+ pickle.dump(out_dict, f)
207
+ ```
208
+
209
+ **方式二:joblib 序列化(推荐用于大型模型)**
210
+
211
+ ```Python
212
+ from joblib import dump
213
+ from ep_sdk_4pd.ep_system import EpSystem
214
+
215
+ model_path = f"{EpSystem.model_output_dir()}/model.joblib"
216
+ dump(your_model, model_path)
217
+ ```
218
+
219
+ **方式三:自定义格式存储(如 JSON/CSV/HDF5 等)** 对于不适合直接 pickle 的模型(如深度学习框架模型、含依赖项对象),也可通过保存权重、参数配置等方式进行落盘。
220
+
221
+ ### Q4:如何判断当前策略运行上下文?
222
+
223
+ 通过 `EpSystem.get_run_strategy()` 可获取策略 ID、配置等元信息,便于调试和日志输出。
224
+
225
+ 如需获取最新数据字段说明、SDK 更新日志或接口文档,请前往平台「数据文档中心」或联系管理员。
@@ -9,6 +9,7 @@ ep_sdk_4pd.egg-info/SOURCES.txt
9
9
  ep_sdk_4pd.egg-info/dependency_links.txt
10
10
  ep_sdk_4pd.egg-info/requires.txt
11
11
  ep_sdk_4pd.egg-info/top_level.txt
12
+ tests/test_call_train_done.py
12
13
  tests/test_get_run_strategy.py
13
14
  tests/test_get_system_date.py
14
15
  tests/test_history_data.py
@@ -8,7 +8,7 @@ DESCRIPTION = '4paradigm Electricity Platform Service SDK Library for Python'
8
8
  AUTHOR = '4paradigm Electricity Platform SDK'
9
9
  AUTHOR_EMAIL = ''
10
10
  URL = 'https://gitlab.4pd.io/electricityproject/electricity-platform-sdk'
11
- VERSION = '0.1.2'
11
+ VERSION = '0.1.3'
12
12
  REQUIRES = ['requests']
13
13
 
14
14
  LONG_DESCRIPTION = ''
@@ -0,0 +1,13 @@
1
+ from ep_sdk_4pd.ep_system import EpSystem
2
+
3
+
4
+ def test_call_train_done():
5
+ print('-------------test_call_train_done-------------')
6
+
7
+ data = EpSystem.call_train_done(strategy_id=None)
8
+ print(data)
9
+ print('-------------------------------------')
10
+
11
+
12
+ if __name__ == '__main__':
13
+ test_call_train_done()
@@ -1,4 +1,3 @@
1
- from ep_sdk_4pd.ep_data import EpData
2
1
  from ep_sdk_4pd.ep_system import EpSystem
3
2
 
4
3
 
@@ -4,7 +4,7 @@ from ep_sdk_4pd.ep_data import EpData
4
4
  def test_history_data():
5
5
  print('-------------test_history_data-------------')
6
6
 
7
- data = EpData.get_history_data(scope="weather", system_date="2025-04-17", days=2)
7
+ data = EpData.get_history_data(scope="weather", days=2)
8
8
  print(data)
9
9
  print('-------------------------------------')
10
10
 
@@ -4,7 +4,7 @@ from ep_sdk_4pd.ep_data import EpData
4
4
  def test_predict_data():
5
5
  print('-------------test_predict_data-------------')
6
6
 
7
- data = EpData.get_predict_data(scope="weather", system_date="2025-04-15")
7
+ data = EpData.get_predict_data(scope="weather")
8
8
  print(data)
9
9
  print('-------------------------------------')
10
10
 
ep_sdk_4pd-0.1.2/PKG-INFO DELETED
@@ -1,21 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: ep_sdk_4pd
3
- Version: 0.1.2
4
- Summary: 4paradigm Electricity Platform Service SDK Library for Python
5
- Home-page: https://gitlab.4pd.io/electricityproject/electricity-platform-sdk
6
- Author: 4paradigm Electricity Platform SDK
7
- Author-email:
8
- Keywords: 4pd_electricity_platform
9
- Platform: any
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Programming Language :: Python
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.6
14
- Classifier: Programming Language :: Python :: 3.7
15
- Classifier: Programming Language :: Python :: 3.8
16
- Classifier: Programming Language :: Python :: 3.9
17
- Classifier: Programming Language :: Python :: 3.10
18
- Classifier: Topic :: Software Development
19
- Requires-Python: >=3.6
20
- Description-Content-Type: text/markdown
21
- Requires-Dist: requests
File without changes
@@ -1 +0,0 @@
1
- __version__ = '0.1.2'
@@ -1,21 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: ep_sdk_4pd
3
- Version: 0.1.2
4
- Summary: 4paradigm Electricity Platform Service SDK Library for Python
5
- Home-page: https://gitlab.4pd.io/electricityproject/electricity-platform-sdk
6
- Author: 4paradigm Electricity Platform SDK
7
- Author-email:
8
- Keywords: 4pd_electricity_platform
9
- Platform: any
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Programming Language :: Python
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.6
14
- Classifier: Programming Language :: Python :: 3.7
15
- Classifier: Programming Language :: Python :: 3.8
16
- Classifier: Programming Language :: Python :: 3.9
17
- Classifier: Programming Language :: Python :: 3.10
18
- Classifier: Topic :: Software Development
19
- Requires-Python: >=3.6
20
- Description-Content-Type: text/markdown
21
- Requires-Dist: requests
File without changes