工具

该库提供了一些额外的工具。

标杆

用于测试和比较不同文件之间的输出的基准工具。其中一些功能也用于测试。

pysd.tools.benchmarking.runner(model_file, canonical_file=None, transpose=False, data_files=None)[源代码]

转换和运行模型并返回其输出和规范输出。

参数:
  • model_file (str) -- 原始模型文件的名称。必须是“.mdl”或“. xmile”。

  • canonical_file (str or None (optional)) -- 要读取的规范输出文件。如果无,将在模型目录中搜索“output.CSV”和“output.tab”。默认为无。

  • transpose (bool (optional)) -- 如果True读取转置的规范文件,即每行一个变量。默认为假。

  • data_files (list (optional)) -- 运行模型所需的数据文件列表。

返回:

output, canon -- pandas.模型输出和规范输出的DataFrame。

返回类型:

(pandas.DataFrame, pandas.DataFrame)

pysd.tools.benchmarking.assert_frames_close(actual, expected, assertion='raise', verbose=False, precision=2, **kwargs)[源代码]

按列比较DataFrame项,如果任何列不相等,则引发AssertionError。

列的顺序并不重要,项目仅通过标签进行比较。支持NaN和无限值。

参数:
  • actual (pandas.DataFrame) -- 模型输出的实际值。

  • expected (pandas.DataFrame) -- 预期模型输出。

  • assertion (str (optional)) -- 如果无法断言两个帧接近时应引发错误,则为“raise”。如果“警告”,则会显示警告消息。如果“返回”,它将返回信息。默认为“raise”。

  • verbose (bool (optional)) -- 如果为True,则如果任何列未关闭,则将在错误/警告消息中打印实际值和预期值的差值。默认为假。

  • precision (int (optional)) -- 精确打印断言动词消息的数值。默认为2。

  • kwargs -- assert_allclose的可选rtol和atol值。

返回:

(cols, first_false_time, first_false_cols) or None --如果断言为“返回”,则返回所有不同列的集合。发现第一次差异的时间以及当时有何不同的变量。如果断言不是“返回”,则返回无。

返回类型:

(set, float, set) or None

示例

>>> assert_frames_close(
...     pd.DataFrame(100, index=range(5), columns=range(3)),
...     pd.DataFrame(100, index=range(5), columns=range(3)))
>>> assert_frames_close(
...     pd.DataFrame(100, index=range(5), columns=range(3)),
...     pd.DataFrame(110, index=range(5), columns=range(3)),
...     rtol=.2)
>>> assert_frames_close(
...     pd.DataFrame(100, index=range(5), columns=range(3)),
...     pd.DataFrame(150, index=range(5), columns=range(3)),
...     rtol=.2)
Traceback (most recent call last):
...
AssertionError:
Following columns are not close:
    '0'
>>> assert_frames_close(
...     pd.DataFrame(100, index=range(5), columns=range(3)),
...     pd.DataFrame(150, index=range(5), columns=range(3)),
...     verbose=True, rtol=.2)
Traceback (most recent call last):
...
AssertionError:
Following columns are not close:
    '0'
Column '0' is not close.
Expected values:
    [150, 150, 150, 150, 150]
Actual values:
    [100, 100, 100, 100, 100]
Difference:
    [50, 50, 50, 50, 50]
>>> assert_frames_close(
...     pd.DataFrame(100, index=range(5), columns=range(3)),
...     pd.DataFrame(150, index=range(5), columns=range(3)),
...     rtol=.2, assertion="warn")
...
UserWarning:
Following columns are not close:
    '0'

引用

源自:

http://nbviewer.jupyter.org/gist/jiffyclub/ac2e7506428d5e1d587b

pysd.tools.benchmarking.assert_allclose(x, y, rtol=1e-05, atol=1e-05)[源代码]

如果两个数组的数值接近,则断言。

参数:
  • x (ndarray) -- 期望值。

  • y (ndarray) -- 实际价值。

  • rtol (float (optional)) -- 误差的相对容忍度。默认为1.e-5。

  • atol (float (optional)) -- 绝对容忍错误。默认为1.e-5。

返回类型:

None

将netCDF data_vars导出到csv或tab

模拟结果可以存储为netEDF( .nc )文件(请参阅 Storing simulation results on a file ).

pysd.tools.ncfiles.NCFile 允许将使用PySD生成的netEDF文件作为 xarray.Dataset .当通过论点时 parallel=True to the constructor, xarray.DataArray inside the Dataset will be loded as dask arrayschunks=-1 .

加载数据集后,data_vars的子集(或全部)可以被输出到:

或者,为了进一步控制分块,用户可以加载 xarray.Dataset 使用 xarray.open_dataset() 然后使用 pysd.tools.ncfiles.NCFile.ds_to_df()pysd.tools.ncfiles.NCFile.df_to_text_file() 静态方法

用于导入和转换从模拟中生成的netEDF文件的工具使用PySD运行。

class pysd.tools.ncfiles.NCFile(filename: str | Path, parallel: bool | None = False)[源代码]

Helper类从netEDF文件中提取数据。

参数:
  • ncfile (str or pathlib.Path) -- 要处理的netEDF文件的路径。

  • parallel (bool (optional)) -- 当为True时,使用chunks=-1打开数据集(详细信息请参阅xArray文档),并使用daskdelayed并行处理DataArrays。Dasks不作为pysd的要求,因此必须单独安装。当数据集包含大型多维数据数组时,强烈建议设置parallel=True。

to_text_file(outfile: str | Path | None = 'result.tab', subset: list | None = None, time_in_row: bool | None = False) <Mock name='mock.DataFrame' id='139859939967120'>[源代码]

将netEDF文件内容转换为逗号分隔或制表符分隔的文件。

参数:
  • outfile (str or pathlib.Path (optional)) -- 输出文件的路径。

  • subset (list (optional)) -- 要从netEDF输出的变量列表。

  • time_in_row (bool (optional)) -- 时间是否随行增加。默认为假。

返回:

df --子集中指定了所有列的数据框架。

返回类型:

pandas.DataFrame

to_df(subset: list | None = None) <Mock name='mock.DataFrame' id='139859939967120'>[源代码]

包裹到ds_to_DF静态方法。将xArray.Dataset转换为pandas DataFrame。

参数:

subset (list (optional)) -- 要从数据集中输出的变量列表。

返回:

df --子集中指定了所有列的数据框架。

返回类型:

pandas.DataFrame

open_nc() <Mock name='mock.Dataset' id='139859978738256'>[源代码]

将netEDF文件加载到xArray数据集中。它基本上是xr.open_dataset的包装器,以简化pysd用例(加载模拟结果)的界面。

返回类型:

xarray.Dataset

static ds_to_df(ds: <Mock name='mock.Dataset' id='139859978738256'>, subset: list | None = None, parallel: bool | None = False, index_dim: str | None = 'time') <Mock name='mock.DataFrame' id='139859939967120'>[源代码]

将xArray.Dataset转换为pandas DataFrame。

参数:
  • ds (xarray.Dataset) -- 数据集对象。

  • subset (list (optional)) -- 要从数据集中输出的变量列表。

  • parallel (bool (optional)) -- 如果为True,则使用daskdelayed并行处理DataArrays。当数据数组较大且多维时,强烈建议设置parallel=True。

  • index_dim (str (optional)) -- 用作结果DataFrame索引的维度名称(通常为“时间”)。

返回:

df --子集中指定了所有列的数据框架。

返回类型:

pandas.DataFrame

static df_to_text_file(df: <Mock name='mock.DataFrame' id='139859939967120'>, outfile: ~pathlib.Path, time_in_row: bool | None = False) None[源代码]

将pandas DataFrame存储到CSV或选项卡文件中。

参数:
  • df (pandas.DataFrame) -- DataFrame保存为CSV或Tab文件。

  • outfile (str or pathlib.Path) -- 输出文件的路径。

  • time_in_row (bool (optional)) -- 时间是沿着列还是沿着行增加。

返回类型:

None

static da_to_dict(da: <Mock name='mock.DataArray' id='139859939967184'>, index_dim: str) dict[源代码]

将DataArray拆分为字典,其中键等于变量名称加上方括号内坐标的carriage积的所有组合,值等于与index_dim维度上的这些坐标对应的数据。

参数:

index_dim (str) -- 在DataArray的索引期间,此维度的坐标将不会固定(即,索引数据将是沿此维度的标量或数组)。

static da_to_dict_delayed(da: <Mock name='mock.DataArray' id='139859939967184'>, index_dim: str) dict[源代码]

与da_to_dict相同,但使用daskdelayed并计算。当da是dask数组(分块)时,此函数运行得快得多。

要单独使用它,您必须首先进行以下导入:

从dask导入延迟,从dask.diagnosis导入计算ProgressBar

参数:

index_dim (str) -- 此维度的坐标在索引期间不会固定(索引的数据将是沿着此维度的数组)。

static dict_to_df(d: dict) <Mock name='mock.DataFrame' id='139859939967120'>[源代码]

将dict转换为pandas数据框架。

参数:

d (dict) -- 要转换为pandas DataFrame的词典。