(
seed: int = 12345,
add_attrs: bool = True,
dim_sizes: tuple[int, int, int] = _DEFAULT_TEST_DIM_SIZES,
use_extension_array: bool = False,
)
| 386 | |
| 387 | |
| 388 | def create_test_data( |
| 389 | seed: int = 12345, |
| 390 | add_attrs: bool = True, |
| 391 | dim_sizes: tuple[int, int, int] = _DEFAULT_TEST_DIM_SIZES, |
| 392 | use_extension_array: bool = False, |
| 393 | ) -> Dataset: |
| 394 | rs = np.random.default_rng(seed) |
| 395 | _vars = { |
| 396 | "var1": ["dim1", "dim2"], |
| 397 | "var2": ["dim1", "dim2"], |
| 398 | "var3": ["dim3", "dim1"], |
| 399 | } |
| 400 | _dims = {"dim1": dim_sizes[0], "dim2": dim_sizes[1], "dim3": dim_sizes[2]} |
| 401 | |
| 402 | obj = Dataset() |
| 403 | obj["dim2"] = ("dim2", 0.5 * np.arange(_dims["dim2"])) |
| 404 | if _dims["dim3"] > 26: |
| 405 | raise RuntimeError( |
| 406 | f"Not enough letters for filling this dimension size ({_dims['dim3']})" |
| 407 | ) |
| 408 | obj["dim3"] = ("dim3", list(string.ascii_lowercase[0 : _dims["dim3"]])) |
| 409 | obj["time"] = ( |
| 410 | "time", |
| 411 | pd.date_range( |
| 412 | "2000-01-01", |
| 413 | periods=20, |
| 414 | unit="ns", |
| 415 | ), |
| 416 | ) |
| 417 | for v, dims in sorted(_vars.items()): |
| 418 | data = rs.normal(size=tuple(_dims[d] for d in dims)) |
| 419 | obj[v] = (dims, data) |
| 420 | if add_attrs: |
| 421 | obj[v].attrs = {"foo": "variable"} |
| 422 | if use_extension_array: |
| 423 | obj["var4"] = ( |
| 424 | "dim1", |
| 425 | pd.Categorical( |
| 426 | rs.choice( |
| 427 | list(string.ascii_lowercase[: rs.integers(1, 5)]), |
| 428 | size=dim_sizes[0], |
| 429 | ) |
| 430 | ), |
| 431 | ) |
| 432 | if has_pyarrow: |
| 433 | obj["var5"] = ( |
| 434 | "dim1", |
| 435 | pd.array( |
| 436 | rs.integers(1, 10, size=dim_sizes[0]).tolist(), |
| 437 | dtype="int64[pyarrow]", |
| 438 | ), |
| 439 | ) |
| 440 | if dim_sizes == _DEFAULT_TEST_DIM_SIZES: |
| 441 | numbers_values = np.array([0, 1, 2, 0, 0, 1, 1, 2, 2, 3], dtype="int64") |
| 442 | else: |
| 443 | numbers_values = rs.integers(0, 3, _dims["dim3"], dtype="int64") |
| 444 | obj.coords["numbers"] = ("dim3", numbers_values) |
| 445 | obj.encoding = {"foo": "bar"} |
searching dependent graphs…