oafuncs 0.0.98.21__py3-none-any.whl → 0.0.98.22__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.
- oafuncs/_script/netcdf_merge.py +18 -8
- oafuncs/oa_cmap.py +16 -7
- {oafuncs-0.0.98.21.dist-info → oafuncs-0.0.98.22.dist-info}/METADATA +1 -1
- {oafuncs-0.0.98.21.dist-info → oafuncs-0.0.98.22.dist-info}/RECORD +7 -7
- {oafuncs-0.0.98.21.dist-info → oafuncs-0.0.98.22.dist-info}/WHEEL +1 -1
- {oafuncs-0.0.98.21.dist-info → oafuncs-0.0.98.22.dist-info}/licenses/LICENSE.txt +0 -0
- {oafuncs-0.0.98.21.dist-info → oafuncs-0.0.98.22.dist-info}/top_level.txt +0 -0
oafuncs/_script/netcdf_merge.py
CHANGED
@@ -82,8 +82,8 @@ def merge_nc(file_list: Union[str, List[str]], var_name: Optional[Union[str, Lis
|
|
82
82
|
|
83
83
|
for var in pbar(merged_data, "Merging variables"):
|
84
84
|
if isinstance(merged_data[var], list):
|
85
|
-
# 使用compat='override'
|
86
|
-
merged_data[var] = xr.concat(merged_data[var], dim=dim_name,
|
85
|
+
# 使用 coords='minimal' 替代默认值,并移除可能冲突的 compat='override'
|
86
|
+
merged_data[var] = xr.concat(merged_data[var], dim=dim_name, coords="minimal")
|
87
87
|
# 恢复原始填充值和缺失值属性
|
88
88
|
if var in fill_values:
|
89
89
|
merged_data[var].attrs["_FillValue"] = fill_values[var]
|
@@ -100,19 +100,29 @@ def merge_nc(file_list: Union[str, List[str]], var_name: Optional[Union[str, Lis
|
|
100
100
|
if coord not in merged_ds.coords:
|
101
101
|
merged_ds = merged_ds.assign_coords({coord: ds0[coord]})
|
102
102
|
|
103
|
-
#
|
103
|
+
""" # 修改合并维度验证逻辑,更合理地检查所有文件维度的兼容性
|
104
104
|
if dim_name in merged_ds.coords and len(file_list) > 1:
|
105
|
-
logging.info(f"
|
106
|
-
|
105
|
+
logging.info(f"检查合并维度 {dim_name} 的有效性...")
|
106
|
+
|
107
|
+
# 收集所有文件的该维度值
|
108
|
+
all_dim_values = []
|
109
|
+
for file in file_list:
|
107
110
|
with xr.open_dataset(file) as ds:
|
108
|
-
if dim_name in ds.coords
|
109
|
-
|
111
|
+
if dim_name in ds.coords:
|
112
|
+
all_dim_values.append(ds[dim_name].values)
|
113
|
+
|
114
|
+
# 只有当有两个或更多不同值集合时才警告
|
115
|
+
unique_values_count = len({tuple(vals.tolist()) if hasattr(vals, "tolist") else tuple(vals) for vals in all_dim_values})
|
116
|
+
if unique_values_count > 1:
|
117
|
+
logging.warning(f"检测到 {unique_values_count} 种不同的 {dim_name} 坐标值集合,合并可能导致数据重新排列")
|
118
|
+
else:
|
119
|
+
logging.info(f"所有文件的 {dim_name} 坐标值完全一致,合并将保持原始顺序") """
|
110
120
|
|
111
121
|
if os.path.exists(target_filename):
|
112
122
|
logging.warning("The target file already exists. Removing it ...")
|
113
123
|
os.remove(target_filename)
|
114
124
|
|
115
|
-
merged_ds.to_netcdf(target_filename,mode=
|
125
|
+
merged_ds.to_netcdf(target_filename, mode="w")
|
116
126
|
|
117
127
|
|
118
128
|
# Example usage
|
oafuncs/oa_cmap.py
CHANGED
@@ -8,7 +8,9 @@ __all__ = ["show", "to_color", "create", "get"]
|
|
8
8
|
|
9
9
|
|
10
10
|
# ** 将cmap用填色图可视化(官网摘抄函数)
|
11
|
-
def show(
|
11
|
+
def show(
|
12
|
+
colormaps: Union[str, mpl.colors.Colormap, List[Union[str, mpl.colors.Colormap]]],
|
13
|
+
) -> None:
|
12
14
|
"""Helper function to plot data with associated colormap.
|
13
15
|
|
14
16
|
This function creates a visualization of one or more colormaps by applying them
|
@@ -97,7 +99,14 @@ def to_color(colormap_name: str, num_colors: int = 256) -> List[tuple]:
|
|
97
99
|
|
98
100
|
|
99
101
|
# ** 自制cmap,多色,可带位置
|
100
|
-
def create(
|
102
|
+
def create(
|
103
|
+
color_list: Optional[List[Union[str, tuple]]] = None,
|
104
|
+
rgb_file: Optional[str] = None,
|
105
|
+
color_positions: Optional[List[float]] = None,
|
106
|
+
below_range_color: Optional[Union[str, tuple]] = None,
|
107
|
+
above_range_color: Optional[Union[str, tuple]] = None,
|
108
|
+
value_delimiter: str = ",",
|
109
|
+
) -> mpl.colors.Colormap:
|
101
110
|
"""Create a custom colormap from a list of colors or an RGB txt document.
|
102
111
|
|
103
112
|
Args:
|
@@ -144,7 +153,7 @@ def create(color_list: Optional[List[Union[str, tuple]]] = None, rgb_file: Optio
|
|
144
153
|
|
145
154
|
if rgb_file:
|
146
155
|
try:
|
147
|
-
print(f"Reading RGB data from {rgb_file}...")
|
156
|
+
# print(f"Reading RGB data from {rgb_file}...")
|
148
157
|
|
149
158
|
with open(rgb_file) as fid:
|
150
159
|
data = [line.strip() for line in fid if line.strip() and not line.strip().startswith("#")]
|
@@ -178,7 +187,7 @@ def create(color_list: Optional[List[Union[str, tuple]]] = None, rgb_file: Optio
|
|
178
187
|
if max_rgb > 2:
|
179
188
|
rgb = rgb / 255.0
|
180
189
|
cmap_color = mpl.colors.ListedColormap(rgb, name="my_color")
|
181
|
-
print(f"Successfully created colormap from {rgb_file}")
|
190
|
+
# print(f"Successfully created colormap from {rgb_file}")
|
182
191
|
except FileNotFoundError:
|
183
192
|
error_msg = f"RGB file not found: {rgb_file}"
|
184
193
|
print(error_msg)
|
@@ -189,15 +198,15 @@ def create(color_list: Optional[List[Union[str, tuple]]] = None, rgb_file: Optio
|
|
189
198
|
cmap_color = mpl.colors.LinearSegmentedColormap.from_list("mycmap", color_list)
|
190
199
|
else:
|
191
200
|
cmap_color = mpl.colors.LinearSegmentedColormap.from_list("mycmap", list(zip(color_positions, color_list)))
|
192
|
-
print(f"Successfully created colormap from {len(color_list)} colors")
|
201
|
+
# print(f"Successfully created colormap from {len(color_list)} colors")
|
193
202
|
|
194
203
|
# Set below/above range colors if provided
|
195
204
|
if below_range_color is not None:
|
196
205
|
cmap_color.set_under(below_range_color)
|
197
|
-
print(f"Set below-range color to {below_range_color}")
|
206
|
+
# print(f"Set below-range color to {below_range_color}")
|
198
207
|
if above_range_color is not None:
|
199
208
|
cmap_color.set_over(above_range_color)
|
200
|
-
print(f"Set above-range color to {above_range_color}")
|
209
|
+
# print(f"Set above-range color to {above_range_color}")
|
201
210
|
|
202
211
|
return cmap_color
|
203
212
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
oafuncs/__init__.py,sha256=T_-VtnWWllV3Q91twT5Yt2sUapeA051QbPNnBxmg9nw,1456
|
2
|
-
oafuncs/oa_cmap.py,sha256=
|
2
|
+
oafuncs/oa_cmap.py,sha256=pUFAGzbIg0WLxObBP2t_--ZIg00Dxdojx0y7OjTeqEo,11551
|
3
3
|
oafuncs/oa_data.py,sha256=Aat9ktxxRGevaqQya3IJWfXeoEs-FCXGUcNE2pKnzfU,10931
|
4
4
|
oafuncs/oa_date.py,sha256=WhM6cyD4G3IeghjLTHhAMtlvJbA7kwQG2sHnxdTgyso,6303
|
5
5
|
oafuncs/oa_draw.py,sha256=IaBGDx-EOxyMM2IuJ4zLZt6ruHHV5qFStPItmUOXoWk,17635
|
@@ -14,7 +14,7 @@ oafuncs/_script/cprogressbar.py,sha256=UIgGcLFs-6IgWlITuBLaQqrpt4OAK3Mst5RlCiNfZ
|
|
14
14
|
oafuncs/_script/data_interp.py,sha256=EiZbt6n5BEaRKcng88UgX7TFPhKE6TLVZniS01awXjg,5146
|
15
15
|
oafuncs/_script/data_interp_geo.py,sha256=ZRFb3fKRiYQViZNHd19eW20C9i38BsiIU8w0fG5mbqM,7789
|
16
16
|
oafuncs/_script/email.py,sha256=lL4HGKrr524-g0xLlgs-4u7x4-u7DtgNoD9AL8XJKj4,3058
|
17
|
-
oafuncs/_script/netcdf_merge.py,sha256=
|
17
|
+
oafuncs/_script/netcdf_merge.py,sha256=tM9ePqLiEsE7eIsNM5XjEYeXwxjYOdNz5ejnEuI7xKw,6066
|
18
18
|
oafuncs/_script/netcdf_modify.py,sha256=sGRUYNhfGgf9JV70rnBzw3bzuTRSXzBTL_RMDnDPeLQ,4552
|
19
19
|
oafuncs/_script/netcdf_write.py,sha256=GvyUyUhzMonzSp3y4pT8ZAfbQrsh5J3dLnmINYJKhuE,21422
|
20
20
|
oafuncs/_script/parallel.py,sha256=07-BJVHxXJNlrOrhrSGt7qCZiKWq6dBvNDBA1AANYnI,8861
|
@@ -39,8 +39,8 @@ oafuncs/oa_sign/__init__.py,sha256=QKqTFrJDFK40C5uvk48GlRRbGFzO40rgkYwu6dYxatM,5
|
|
39
39
|
oafuncs/oa_sign/meteorological.py,sha256=8091SHo2L8kl4dCFmmSH5NGVHDku5i5lSiLEG5DLnOQ,6489
|
40
40
|
oafuncs/oa_sign/ocean.py,sha256=xrW-rWD7xBWsB5PuCyEwQ1Q_RDKq2KCLz-LOONHgldU,5932
|
41
41
|
oafuncs/oa_sign/scientific.py,sha256=a4JxOBgm9vzNZKpJ_GQIQf7cokkraV5nh23HGbmTYKw,5064
|
42
|
-
oafuncs-0.0.98.
|
43
|
-
oafuncs-0.0.98.
|
44
|
-
oafuncs-0.0.98.
|
45
|
-
oafuncs-0.0.98.
|
46
|
-
oafuncs-0.0.98.
|
42
|
+
oafuncs-0.0.98.22.dist-info/licenses/LICENSE.txt,sha256=rMtLpVg8sKiSlwClfR9w_Dd_5WubTQgoOzE2PDFxzs4,1074
|
43
|
+
oafuncs-0.0.98.22.dist-info/METADATA,sha256=ctJ9aAoY3RztAP6gD2STCFB0ZZaCbXQV8SufCLMGkbM,4273
|
44
|
+
oafuncs-0.0.98.22.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
45
|
+
oafuncs-0.0.98.22.dist-info/top_level.txt,sha256=bgC35QkXbN4EmPHEveg_xGIZ5i9NNPYWqtJqaKqTPsQ,8
|
46
|
+
oafuncs-0.0.98.22.dist-info/RECORD,,
|
File without changes
|
File without changes
|