|
| 1 | +import itertools |
1 | 2 | from textwrap import dedent |
2 | 3 |
|
3 | 4 | import matplotlib as mpl |
@@ -627,26 +628,77 @@ def test_docstring(): |
627 | 628 | assert "One or more of ('X'" in airds.cf.mean.__doc__ |
628 | 629 |
|
629 | 630 |
|
630 | | -def test_guess_coord_axis(): |
| 631 | +def _make_names(prefixes): |
| 632 | + suffixes = ["", "a", "_a", "0", "_0"] |
| 633 | + return [ |
| 634 | + f"{prefix}{suffix}" for prefix, suffix in itertools.product(prefixes, suffixes) |
| 635 | + ] |
| 636 | + |
| 637 | + |
| 638 | +_TIME_NAMES = _make_names( |
| 639 | + [ |
| 640 | + "time", |
| 641 | + "min", |
| 642 | + "hour", |
| 643 | + "day", |
| 644 | + "week", |
| 645 | + "month", |
| 646 | + "year", |
| 647 | + ] |
| 648 | +) |
| 649 | +_VERTICAL_NAMES = _make_names( |
| 650 | + [ |
| 651 | + "lv_1", |
| 652 | + "bottom_top", |
| 653 | + "sigma", |
| 654 | + "sigma_w", |
| 655 | + "hght", |
| 656 | + "height", |
| 657 | + "altitude", |
| 658 | + "depth", |
| 659 | + "isobaric", |
| 660 | + "pressure", |
| 661 | + "isotherm", |
| 662 | + ] |
| 663 | +) |
| 664 | +_X_NAMES = _make_names(["x"]) |
| 665 | +_Y_NAMES = _make_names(["y"]) |
| 666 | +_Z_NAMES = _VERTICAL_NAMES |
| 667 | +_LATITUDE_NAMES = _make_names(["lat", "latitude"]) |
| 668 | +_LONGITUDE_NAMES = _make_names(["lon", "longitude"]) |
| 669 | + |
| 670 | + |
| 671 | +@pytest.mark.parametrize( |
| 672 | + "kind, names", |
| 673 | + [ |
| 674 | + ["X", _X_NAMES], |
| 675 | + ["Y", _Y_NAMES], |
| 676 | + ["Z", _Z_NAMES], |
| 677 | + ["T", _TIME_NAMES], |
| 678 | + ["latitude", _LATITUDE_NAMES], |
| 679 | + ["longitude", _LONGITUDE_NAMES], |
| 680 | + ], |
| 681 | +) |
| 682 | +def test_guess_coord_axis(kind, names): |
| 683 | + from cf_xarray.accessor import ATTRS |
| 684 | + |
| 685 | + for varname in names: |
| 686 | + ds = xr.Dataset() |
| 687 | + ds[varname] = (varname, [1, 2, 3, 4, 5]) |
| 688 | + dsnew = ds.cf.guess_coord_axis() |
| 689 | + assert dsnew[varname].attrs == ATTRS[kind] |
| 690 | + |
| 691 | + varname = varname.upper() |
| 692 | + ds[varname] = (varname, [1, 2, 3, 4, 5]) |
| 693 | + dsnew = ds.cf.guess_coord_axis() |
| 694 | + assert dsnew[varname].attrs == ATTRS[kind] |
| 695 | + |
| 696 | + |
| 697 | +def test_guess_coord_axis_datetime(): |
631 | 698 | ds = xr.Dataset() |
632 | 699 | ds["time"] = ("time", pd.date_range("2001-01-01", "2001-04-01")) |
633 | | - ds["lon_rho"] = ("lon_rho", [1, 2, 3, 4, 5]) |
634 | | - ds["lat_rho"] = ("lat_rho", [1, 2, 3, 4, 5]) |
635 | | - ds["x1"] = ("x1", [1, 2, 3, 4, 5]) |
636 | | - ds["y1"] = ("y1", [1, 2, 3, 4, 5]) |
637 | | - |
638 | 700 | dsnew = ds.cf.guess_coord_axis() |
639 | 701 | assert dsnew.time.attrs == {"standard_name": "time", "axis": "T"} |
640 | | - assert dsnew.lon_rho.attrs == { |
641 | | - "standard_name": "longitude", |
642 | | - "units": "degrees_east", |
643 | | - } |
644 | | - assert dsnew.lat_rho.attrs == { |
645 | | - "standard_name": "latitude", |
646 | | - "units": "degrees_north", |
647 | | - } |
648 | | - assert dsnew.x1.attrs == {"axis": "X"} |
649 | | - assert dsnew.y1.attrs == {"axis": "Y"} |
650 | 702 |
|
651 | 703 |
|
652 | 704 | def test_attributes(): |
|
0 commit comments