File size: 1,941 Bytes
c840faa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b33ada
adcc894
9b33ada
f75cf1f
adcc894
 
 
c840faa
f75cf1f
adcc894
9b33ada
c840faa
 
 
 
 
 
6f62e72
c840faa
 
f75cf1f
c840faa
 
 
 
 
 
 
 
 
 
 
 
 
9b33ada
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- coding: utf-8 -*-
"""
Created on Fri Jun  9 09:12:15 2023

@author: mritchey
"""
import gradio as gr
from joblib import Parallel, delayed
import pandas as pd
import rioxarray
import xarray as xr
import numpy as np
from tqdm import tqdm

def get_rtma_data(date_time,var='GUST'):
    dt=date_time.strftime('%Y%m%d%H%M')
    date=dt[:8]
    year,month,day,time=dt[:4],dt[4:6],dt[6:8],dt[8:]
    url=f'https://mtarchive.geol.iastate.edu/{year}/{month}/{day}/grib2/ncep/RTMA/{date}{time}_{var}.grib2'
    try:
        ds_values = xr.open_rasterio(url).values
    except:
        ds_values=url
    return ds_values


def get_rtma_values(date,time,days_head,variable):
    start_date=pd.to_datetime(date+time)
    end_date = start_date + pd.DateOffset(days=int(days_head))
    hourly_range = pd.date_range(start=start_date, end=end_date, freq='H')

    mat=Parallel(n_jobs=16)(delayed(get_rtma_data)(date_time,variable) for date_time in tqdm(hourly_range[:2]))
    mat = [x[0] for x in mat if isinstance(x, np.ndarray)]
    mat=np.array(mat)
    mat_max=np.max(mat,axis=0)
    # mat_min=np.min(mat,axis=0)
    # mat_mean=np.mean(mat,axis=0)
    # mat_std=np.std(mat,axis=0)
    
    # return mat
    # return [mat_max,mat_min,mat_mean,mat_std]
    return mat_max

    

with gr.Blocks(show_api=True) as demo:
    date = gr.Textbox(label="Date",placeholder='20220927')
    time = gr.Textbox(label="Time",placeholder='1200')
    days_head = gr.Textbox(label="Days Ahead" ,placeholder='1')
    variable = gr.Textbox(label="Variable",placeholder='GUST')
    greet_btn = gr.Button("Get Matrix")
    output = gr.Numpy(label="Matrix")
    greet_btn.click(fn=get_rtma_values, 
                    inputs=[date, time, days_head, variable], 
                    outputs=output,
                    api_name="rtma range")



demo.launch()

# date='20220927'
# time='1200'
# days_head=1
# variable='GUST'
# # get_rtma_values(date,time,days_head,variable)