You can run this notebook in Binder, in Colab, in Deepnote or in Kaggle.

[1]:
!pip install --quiet climetlab

Dataset availability

(Work in progress)

[2]:
from climetlab.utils.availability import Availability
from climetlab.decorators import availability
[3]:
C0 = [
    {"level": "500", "param": "Z", "step": "24"},
    {"level": "500", "param": "Z", "step": "36"},
    {"level": "500", "param": "Z", "step": "48"},
    {"level": "500", "param": "T", "step": "24"},
    {"level": "500", "param": "T", "step": "36"},
    {"level": "500", "param": "T", "step": "48"},
    {"level": "850", "param": "T", "step": "36"},
    {"level": "850", "param": "T", "step": "48"},
    {"level": "1000", "param": "Z", "step": "24"},
    {"level": "1000", "param": "Z", "step": "48"},
]
[4]:
a0 = Availability(C0)
[5]:
a0
[5]:

level=1000, param=Z, step=[24, 48]
level=500, param=[T, Z], step=[24, 36, 48]
level=850, param=T, step=[36, 48]

[6]:
C1 = [
    {"level": "500", "param": "Z", "step": "24"},
    {"level": "500", "param": "Z", "step": "36"},
    {"level": "500", "param": "Z", "step": "48"},
    {"level": "500", "param": "T", "step": "24"},
    {"level": "500", "param": "T", "step": "36"},
    {"level": "500", "param": "T", "step": "48"},
    {"level": "850", "param": "T", "step": "36"},
    {"level": "850", "param": "T", "step": "48"},
    {"level": "1000", "param": "Z", "step": "24"},
    {"level": "1000", "param": "Z", "step": "48"},
    {"level": "850", "param": "Z", "step": "36"},
    {"level": "850", "param": "Z", "step": "48"},
]
[7]:
a1 = Availability(C1)
[8]:
a1
[8]:

param=[T, Z]
   level=500, step=[24, 36, 48]
   level=850, step=[36, 48]
param=Z, level=1000, step=[24, 48]

[9]:
a1.select(param="Z")
[9]:

param=Z
   level=1000, step=[24, 48]
   level=500, step=[24, 36, 48]
   level=850, step=[36, 48]

[10]:
a1.select(param="T")
[10]:

param=T
   level=500, step=[24, 36, 48]
   level=850, step=[36, 48]

[11]:
for r in a1.select(param="T").iterate():
    print(r)
{'param': ('T',), 'level': ('500',), 'step': ('24', '36', '48')}
{'param': ('T',), 'level': ('850',), 'step': ('36', '48')}
[12]:
for r in a1.select(param="T").iterate(True):
    print(r)
{'param': 'T', 'level': '500', 'step': '24'}
{'param': 'T', 'level': '500', 'step': '36'}
{'param': 'T', 'level': '500', 'step': '48'}
{'param': 'T', 'level': '850', 'step': '36'}
{'param': 'T', 'level': '850', 'step': '48'}
[13]:
a1.select(step="36")
[13]:

level=[500, 850], param=[T, Z], step=36

[14]:
a1.select(step="36", param="T")
[14]:

level=[500, 850], param=T, step=36

[15]:
a1.count(step="36", param="T")
[15]:
2
[16]:
a1.count()
[16]:
12
[17]:
a1.select(step="22")
[17]:


[18]:
a1.select(param="Z", step="99").count()
[18]:
0
[19]:
a3 = Availability(
    [
        {"date": ["1990-01-01/1990-01-02"], "param": ["Z", "T"]},
        {"date": ["1990-01-02/1990-01-05"], "param": ["Z"]},
        {"date": ["1990-01-04/1990-01-15"], "param": ["Z", "T"]},
    ],
    intervals=["date"],
)
[20]:
a3
[20]:

date=1990-01-01/1990-01-15, param=Z
date=[1990-01-01/1990-01-02, 1990-01-04/1990-01-15], param=T

[21]:
a3.count()
[21]:
29
[22]:
a3.select(date="1990-01-02/1990-01-04")
[22]:

date=[1990-01-02, 1990-01-04], param=T
date=1990-01-02/1990-01-04, param=Z

[23]:
for r in a3.select(date="1990-01-02/1990-01-04").iterate(True):
    print(r)
{'date': datetime.date(1990, 1, 2), 'param': 'T'}
{'date': datetime.date(1990, 1, 4), 'param': 'T'}
{'date': datetime.date(1990, 1, 2), 'param': 'Z'}
{'date': datetime.date(1990, 1, 3), 'param': 'Z'}
{'date': datetime.date(1990, 1, 4), 'param': 'Z'}
[24]:
a3.missing(param="T", date="1990-01-01/1990-01-15")
[24]:

date=1990-01-03, param=T

[ ]: