# -*- 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)