
    Iyj                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm Z! d dl"m"Z" d dl#m$Z% d dl&m'Z' d dl(m)Z)  ejT                  d        ejT                  d        ejT                  d        ejT                  d	        ejT                  d
        ejT                  d        e'       Z+e+jY                         Z-d Z.dZ/ e.e/      Z0e0d    r? e.e/      d   Z1g dZ2e2D  cg c]  } | d    jg                          c} Z4 e5e1      Z6 e5 e7d e6D                    Z8 e5 e7d e6D                    Z9 e5 e7d e6D                    Z: e5 e7d e6D                    Z; e5e1      d    Z<e1e<   j{                         Z>e>j~                  j                  d    ZAe>j~                  j                  d   ZB ej                  eA      j                         ZE ej                  eB      j                         ZFej                  j                  deEeFeEdd      ZIej                  j                  de2D cg c]  }|d    	 c}e2D cg c]  }|d    	 c}d    dd      ZKej                  j                  de8e8d   dd      ZLej                  j                  d e;e;d   dd      ZMej                  j                  d!e:e:d    d
d      aNej                  j                  d"e:e:d    gddd#      ZPd$d%gZQej                  j                  d&ej                  d'd(d)*      ZTej                  j                  d+d
d,      ZVej                  j                  d-e9e9d    dd      ZWej                  j                  d.eQeQd   dd      ZXej                  j                  de8e8d   dd      ZYej                  j                  d e;e;d   dd      ZZej                  j                  d/e:e:d    dd      Z[ej                  j                  d0e:e:d   dd      Z\d1d2gZ]ej                  j                  d3e]d4      Z^ej                  j                  d&ej                  d'd(d)*      Z_ej                  j                  d+d
d,      Z`ej                  j                  d5d6dd7d8dd
9      Zbej                  j                  d-e9e9d    dd      Zcej                  j                  d-e9e9d    dd      Zdej                  j                  de2D cg c]  }|d    	 c}e2D cg c]  }|d    	 c}d    dd      Zeej                  j                  de8e8d   dd      Zfej                  j                  d e;e;d   dd      Zgej                  j                  d:e:e:d    gddd#      Zhej                  j                  d;d
d
<      Zid= Zjd> Zkdal ej                  eKeLeMePt        ei      d?        Zn ej                  eWeXeYeZe[e\eTeVei	      d@        Zo ej                  edeeefegeIe_e`ebehe^
      dA        ZpdB ZqdC ZrydD ZqdE Zryc c} w c c}w c c}w c c}w c c}w )F    N)datetime)pyplot)MonitoringAppTexts)MonitoringAppDatesbokehkatex
floatpanel
texteditorT)notificationsstretch_widthsizing_modec                    	 t        j                  | dd      }|j                  dk  r't        d|         t	        j
                  |       }d|fS t        d|  d|j                   d       y	# t         j                  $ r Y y	w xY w)
NT   )allow_redirectstimeouti  u)   ✅ [OBJ EVALUATION] Arquivo acessível: u.   ❌ [OBJ EVALUATION] Arquivo não encontrado: z	 (status ))FN)requestsheadstatus_codeprintintakeopen_catalogRequestException)urlresponsecatalog_objs      8/home/carlos/GitHub/SMNAMonitoringApp/monitor_objeval.py
url_existsr   /   s    ==dAF#%=cUCD --c2K$$B3%yQYQeQePffghi$$ s   AA- A- -BBzuhttps://dataserver.cptec.inpe.br/dataserver_dimnt/das/carlos.bastarz/SMNAMonitoringApp/objeval/catalog-scantec-s0.yml   )*)zVTMP:925z!Virtual Temperature @ 925 hPa [K])zVTMP:850z!Virtual Temperature @ 850 hPa [K])zVTMP:500z!Virtual Temperature @ 500 hPa [K])zVTMP:250z!Virtual Temperature @ 250 hPa [K])zVTMP:200z!Virtual Temperature @ 200 hPa [K])zVTMP:150z!Virtual Temperature @ 150 hPa [K])zVTMP:070z Virtual Temperature @ 70 hPa [K])zVTMP:050z Virtual Temperature @ 50 hPa [K])zTEMP:850z"Absolute Temperature @ 850 hPa [K])zTEMP:500z"Absolute Temperature @ 500 hPa [K])zTEMP:250z"Absolute Temperature @ 250 hPa [K])zTEMP:200z"Absolute Temperature @ 200 hPa [K])zTEMP:150z"Absolute Temperature @ 150 hPa [K])zTEMP:070z!Absolute Temperature @ 70 hPa [K])zTEMP:050z!Absolute Temperature @ 50 hPa [K])zPSNM:000zMean Sea Level Pressure [hPa])zUMES:925z"Specific Humidity @ 925 hPa [g/Kg])zUMES:850z"Specific Humidity @ 850 hPa [g/Kg])zUMES:500z"Specific Humidity @ 500 hPa [g/Kg])zUMES:250z"Specific Humidity @ 250 hPa [g/Kg])zUMES:200z"Specific Humidity @ 200 hPa [g/Kg])zUMES:150z"Specific Humidity @ 150 hPa [g/Kg])zUMES:070z!Specific Humidity @ 70 hPa [g/Kg])zUMES:050z!Specific Humidity @ 50 hPa [g/Kg])zAGPL:000z+Inst. Precipitable Water @ 1000 hPa [Kg/m2])zZGEO:850z#Geopotential height @ 850 hPa [gpm])zZGEO:500z#Geopotential height @ 500 hPa [gpm])zZGEO:250z#Geopotential height @ 250 hPa [gpm])zUVEL:850zZonal Wind @ 850 hPa [m/s])zUVEL:500zZonal Wind @ 500 hPa [m/s])zUVEL:250zZonal Wind @ 250 hPa [m/s])zUVEL:200zZonal Wind @ 200 hPa [m/s])zUVEL:150zZonal Wind @ 150 hPa [m/s])zUVEL:070zZonal Wind @ 70 hPa [m/s])zUVEL:050zZonal Wind @ 50 hPa [m/s])zVVEL:850zMeridional Wind @ 850 hPa [m/s])zVVEL:500zMeridional Wind @ 500 hPa [m/s])zVVEL:250zMeridional Wind @ 250 hPa [m/s])zVVEL:200zMeridional Wind @ 200 hPa [m/s])zVVEL:150zMeridional Wind @ 150 hPa [m/s])zVVEL:070zMeridional Wind @ 70 hPa [m/s])zVVEL:050zMeridional Wind @ 50 hPa [m/s]c              #   D   K   | ]  }|j                  d       d     yw)-r    Nsplit.0items     r   	<genexpr>r(   u        <4DJJsOA&<    c              #   `   K   | ]&  }|j                  d       d   j                          ( yw)r"      Nr$   upperr%   s     r   r(   r(   v   s&     EDTZZ_Q'--/E   ,.c              #   `   K   | ]&  }|j                  d       d   j                          ( yw)r"      Nr-   r%   s     r   r(   r(   w   s&     D4DJJsOA&,,.Dr/   c              #   D   K   | ]  }|j                  d       d     yw)r"      Nr#   r%   s     r   r(   r(   x   r)   r*   Dataz%Y-%m-%d   )namestartendvalueformatwidthVariableF)r7   optionsr:   disabledr<   Regionr1   	ReferencezExperiment (Table)zExperiments (Plots))r7   r>   r:   r?   solidr<   Percentual GainFractional ChangeColormapcoolwarm   )r   r   r   r   )r7   r>   
value_namer<   marginzInvert Colors)r7   r:   r<   	StatisticTypezExperiment 1zExperiment 2imagecontourFill)r7   r>   r<   	Intervals
   r      )r7   r:   stepr8   r9   r<   r?   Experimentsu   Catálogo Carregado)r7   r:   r?   c                     | j                         j                         j                         | j                         j                         j                         fS N)computeminr'   max)dss    r   get_min_max_dsrZ      s=    zz|!&&("**,*:*:*<*A*A*CCC    c                     d| z   dz   |z   dz   |j                         z   dz   |z   dz   }t        |   j                         }|j                  dd       d|j                  _        |S )Nscantec-r"   -table
Unnamed: 0Tinplace )lowerdata_catalogread	set_indexindexr7   )regexpstatrefvarlevknamedfs          r   get_dfro      si    S 3&-3ciikACG#MPXX% %%'
\40	r[   c                     |r| r|r|r|r}t         D ]  }|d   | k(  s|d   } | j                         } d}t        |      D ]  \  }	}|	dk(  r||	   }
|}t        ||
d||         I j                  j                  d| dddd	d
t        |
      dddd	|dt              z         } j                  j                  d| t        |
      |dd	d	      j                  dd      }t        ||
d||       j                  j                  d| dddd	d
t        |
      dddd	|dt        |      z         }j                  j                  d| t        |
      |dd	d	      j                  dd      }t        ||
d||       j                  j                  d| dddd	d
t        |
      dddd	|dt        |      z         }j                  j                  d| t        |
      |dd	d	      j                  dd      }n||	   }
t        ||
d||          j                  j                  d| dddd	d
t        |
      dddd	|dt              z         z  } j                  j                  d| t        |
      |dd	d	      j                  dd      z  }t        ||
d||       j                  j                  d| dddd	d
t        |
      dddd	|dt        |      z         z  }j                  j                  d| t        |
      |dd	d	      j                  dd      z  }t        ||
d||       j                  j                  d| dddd	d
t        |
      dddd	|dt        |      z         z  }j                  j                  d| t        |
      |dd	d	      j                  dd      z  }|t        j                  d      j                  ddd	|dd      z  }t        j                  d      j                  ddd	|dd      z  }t        j                  d      j                  ddd	|dd      z  }d}t        |d||        t        j                  j                   ddd d!d"|gd	#      }t        ||d||       t        j                  j                  ddd d!d"|gd	#      }t        ||d||       t        j                  j                  ddd d!d"|gd	#      } 9|j                  d	d$%       j                  d	d&%       j                  d	d$%        fd'}t        j                  j                  d(|d) d*d+d,-      }fd.}t        j                  j                  d(|d/| d*d+d,-      }fd0}t        j                  j                  d(|d1| d*d+d,-      }t        j                  dt        j                   |      fdt        j                   |      fdt        j                   |      fd23      }t        j                  d4t        j"                  |z  z  z   z  z         j%                  d
      fd5t        j                   d6|      f      ad7 }t&        j(                  j+                  |d8       t&        S t        j                   t        j,                  j/                  d9      t        j,                  j1                  d:d;<            at&        S )=Nr   r    i  vies	%PrevisaoHorasVIESFTr1   12pxrP   )ylabeltickszVIES - )xyxlabelrv   shared_axesgrid
line_widthlabelfontsize
responsiveheighttitle)rx   ry   r~   r   r{   persistr   r   o)sizemarkerrmseRMSEzRMSE - acorACORzACOR - blackdashed)r}   r{   r   r   
line_color	line_dashg333333?zn
                    .tabulator-cell {
                    font-size: 12px;
                }
                
bootstrap4centerfit_data_tabletoggle)
show_indextheme
text_alignlayout
selectablestylesheetsr?   bottom_left)axiswiselegend_positiontop_leftc                  x    t        j                         } j                  | d       | j                  d       | S NF)rg   r   ioBytesIOto_csvseek)	io_bufferdf_viess    r   get_csv_viesz plotCurves.<locals>.get_csv_vies  0    JJL	y6q!  r[   downloadvies_table_z.csvsuccessi6  )iconcallbackfilenamebutton_typer<   c                  x    t        j                         } j                  | d       | j                  d       | S r   r   )r   df_rmses    r   get_csv_rmsez plotCurves.<locals>.get_csv_rmse  r   r[   rmse_table_c                  x    t        j                         } j                  | d       | j                  d       | S r   r   )r   df_acors    r   get_csv_acorz plotCurves.<locals>.get_csv_acor  r   r[   acor_table_left)tabs_locationPLOTSTABLESz8Statistics tables from the SCANTEC objective evaluation.c                 P    | j                   dk(  rdt        _        y dt        _        y )Nr    FT)new
expt_st_tbr?   events    r   update_expt_st_tb_widgetz,plotCurves.<locals>.update_expt_st_tb_widget  s    99>*/J'*.J'r[   activeu@  
                        # Série Temporal

                        A avaliação por meio de série temporal permite verificar o comportamento de parâmetros (variáveis) do modelo ao longo do tempo, seja por meio da verificação dos erros aleatórios, sistemáticos e habilidade de previsão.
                           ⛔ **Atenção:** Nada para mostrar! Para começar, selecione um catálogo de dados ou aguarde a execução da função de plotagem.danger
alert_type)Varsrc   	enumeratero   hvplotlinestrscatteroptshvsHLinepnwidgets	TabulatorFileDownloadTabsColumnLayoutcolstabs_layoutparamwatchpaneMarkdownAlert)!	varlev_streg_stref_stexpt_str   loadedinexp_extr   countri   exp_tbax_vies	ax_vies_sax_rmse	ax_rmse_sax_acor	ax_acor_s
stylesheetdf_vies_tabledf_rmse_tabledf_acor_tabler   file_download_viesr   file_download_rmser   file_download_acor
tabulatorsr   r   r   r   s!                                 @@@r   
plotCurvesr      s	    iFv' $Q49$ tH$ ")IF%g. h7qA:!%.C'F$VS&&)LG*").."5"5.73:398=157825c(@FQS5T7;392@3x=2P #6 #R %,NN$:$:[I]`ad]ent  CH  RV  cg$:  %h  %m  %m  st  }@  %m  %A	"(ffi"P").."5"5.73:398=157825c(@FQS5T7;392@3x=2P #6 #R %,NN$:$:[I]`ad]ent  CH  RV  cg$:  %h  %m  %m  st  }@  %m  %A	"(ffi"P").."5"5.73:398=157825c(@FQS5T7;392@3x=2P #6 #R %,NN$:$:[I]`ad]ent  CH  RV  cg$:  %h  %m  %m  st  }@  %m  %A	 "%.C$VS&&)LG*7>>#6#6.73:398=157825c(@FQS5T7;392@3x=2P $7 $R R "W^^%;%;kY^abe^fou  DI  SW  dh%;  &i  &n  &n  tu  ~A  &n  &B  B	"(ffi"P7>>#6#6.73:398=157825c(@FQS5T7;392@3x=2P $7 $R R "W^^%;%;kY^abe^fou  DI  SW  dh%;  &i  &n  &n  tu  ~A  &n  &B  B	"(ffi"P7>>#6#6.73:398=157825c(@FQS5T7;392@3x=2P $7 $R R "W^^%;%;kY^abe^fou  DI  SW  dh%;  &i  &n  &n  tu  ~A  &n  &B  B	&syy|00A5]ajp  ~E  QY0   Z  ZGsyy|00A5]ajp  ~E  QY0   Z  ZGsyy~22aU_clr  @G  S[2   \  \G
 !K "

 4 4W38.:3;/?3; 6@L15 !5 !7 !K "

 4 4W38.:3;/?3; 6@L15 !5 !7 !K "

 4 4W38.:3;/?3; 6@L15 !5 !7{h7T "dMJdJGdMJ! "$!8!8%&vhd3% "9 "! "$!8!8%&vhd3% "9 "! "$!8!8%&vhd3% "9 " &"))MCU*V!W!'=BT)U V!'=BT)U VflnJ
 ''7CJJwy7H7S\K\7\_fgp_p7p,q,v,vwx,y"z!)2995oq{+| }K
/ ##$<hG  ))(( * 
   'n  {C  DK r[   c	                 	   |r| r|r|r|r|r|r|r|rt               d   }	d|z   dz   | j                         z   dz   |j                         z   dz   |z   dz   }
d|z   dz   | j                         z   dz   |j                         z   dz   |z   dz   }|	|
   j                         }|	|   j                         }|j                  dd       d|j                  _        |j                  dd       d|j                  _        t        j                  |d	t        
      }t        j                  |d	t        
      }|dk(  r	|d d d   }n|}|dk(  ri| dk(  r-|j                  |j                  z
  d|j                  z
  z  dz  }nX| dk(  s| dk(  rN|j                  |j                  z
  d|j                  z
  z  dz  }n!|dk(  rd|j                  |j                  z  z
  }j                         j                  j                         rD|j                  d      }|j                  t        j                   t        j                    gdd       t#        j$                  d       t'        j(                  dd       t'        j*                  ddddddddddddd       |dk(  rt'        j,                  |dd |d!dd"d#d$dt        j.                  d!d%d&      d'd(d)*
      }|j0                  d"   j2                  }|j5                  g d+       |j7                  g d,       |j8                  j;                  d-.       t#        j<                  d/t?        |       z   d0z   |z   d1z   |z   d23       n|dk(  rt'        j,                  |dd |dd4d"d#d$dt        j.                  dd5d4      d'd(d)*
      }|j0                  d"   j2                  }|j5                  g d6       |j7                  g d7       |j8                  j;                  d-.       t#        j<                  d8t?        |       z   d9z   |z   d1z   |z   d23       t#        j@                  d:       t#        jB                  d-3       t#        jD                  d-3       t#        jF                          jI                         }t#        jJ                          |S tM        jN                  tL        jP                  jS                  d;      tL        jP                  jU                  d<d=>            }|S )?Nrd   r]   r"   r^   r_   Tr`   rb   rr   )rg   valuesr4   rC   r   g      ?d   r   rt   g        rD   gHz>i@B )	      )figsize	whitegridg?)style
font_scaleg      ?g?      ?)zxtick.major.sizezytick.major.sizezxtick.major.padzytick.major.padzxtick.major.widthzytick.major.widthzxtick.minor.sizezytick.minor.sizezxtick.minor.padzytick.minor.padzxtick.minor.widthzytick.minor.width)rcz.3fr   g      ?Fn   rP   g{Gz?vertical)shrinkrw   padorientation)	annotfmtcmapvminvmaxr   
linewidthssquarecbar_kws)r   ir   2   r   )piorz-50%0z50%melhor   )	labelsizezGanho z (%) - z Vs.    )r   r    r,   )r4   g      r   r   r    )r  z-0.5r  z0.5r  zFractional Change z - zForecast Lengthu  
                        # Scorecard

                        Para uma variável alpha (e.g., pressão, temperatura, umidade, componentes do vento etc.), podem ser calculadas duas métricas que permitem quantificar a variação relativa entre dois experimentos avaliados pelo SCANTEC. As métricas aplicadas são o Ganho Percentual e a Mudança Fracional* e ambas podem ser calculadas com base nas tabelas de estatisticas do SCANTEC. Estas métricas podem ser utilizadas quando se quiser ter uma visão imediata sobre as melhorias obtidas entre duas versões de um modelo ou entre dois experimentos de um mesmo modelo.
                        r   r   r   )+globalsrc   re   rf   rg   r7   pdpivot_tablelist_varTisnullr   anyfillnareplacenpinfpltfiguresnssetset_contextheatmaparangecollectionscolorbar	set_ticksset_ticklabelsaxtick_paramsr   r   rz   yticksxtickstight_layout
get_figurecloser   r   r   r   r   )statt_sctstatreg_scref_scexpt1expt2colormap_scinvert_colors_scr   dfskname1kname2df1df2p_table1p_table2r  score_tabler+  cbarr   s                        r   plotScorecardrC    s    h5V5UWbgw)N+C&(3.1AACG%++-WZ]]`ffiqqF&(3.1AACG%++-WZ]]`ffiqqFf+""$Cf+""$CMM,M5CIINMM,M5CIIN~~cXNH~~cXNH4'"4R4("))v%$,JJ$;hjj@P#QUX"XK'8v+=$,JJ$;hjj@P#QUX"XK--  #hjj8::&=>!!#**..0 *00; ##RVVbffW$5w#M
 JJ'GG+%8OOSs59t58s58s59t58s T U ))[[De$%)A$W\47134B1G/37A*CD ~~a(1167##$JK##a#0		(S]2Y>FPSXXcde--[[De$%'adSX47132a1B/37A*CD ~~a(1145##$JK##a#0		.X>FNQXX[``klmJJ()JJ"JJ"]]_FIIK  YY(( * 
   'n  {C  DF r[   c
                 j   t        |      dz   }|j                  dd      j                         }
t        D ]  }|d   |k(  s|d   } |dk(  r	|d d d   }n|}|dk(  rd}d	}n"|d
k(  s|dk(  rd}d}n|dk(  rd}d}n	|dk(  rd}d}t	        |      D ]   \  }}||   }d|z   dz   | j                         z   dz   |j                         z   dz   |z   dz   }t
        t
        |   j                         }t        |
         \  }}|	dk(  r|dk(  r|j                  |      j                  j                  dd|
|t        j                         dd||ft        |       dz   t        |      z   dz   t              z   dz   t        |      z   dz         }n|j                  |      j                  j                  dd|
|t        j                         dd||ft        |       dz   t        |      z   dz   t              z   dz   t        |      z   dz         z  }n|	dk(  r|dk(  r|j                  |      j                  j                  dd|
|t        j                         dd||f|dt        |       dz   t        |      z   dz   t              z   dz   t        |      z   dz         }n|j                  |      j                  j                  dd|
|t        j                         dd||f|dt        |       dz   t        |      z   dz   t              z   dz   t        |      z   dz         z  }|dk(  rV|dkD  r*t        j                  g      j!                  |dz         }t        j                  g      j!                  d      }t        j                  g      j!                  d      }# S )Nz 12:00:rb   r   r    Tr4   asiX  hnhs   tr   gliN  r]   r"   z-fieldrL   )timelonlatz (z) - r   )rx   ry   zdata_aspectframe_heightr  
projection	coastline	rasterizeclimr   rM   r,   )rx   ry   rP  rQ  rR  r  rS  rT  rU  rV  levelsr}   r   )r   r  rc   r   r   rd   to_daskrZ   selr   rL   ccrsPlateCarreerM   r   r   r   )stat_de	varlev_dereg_deref_dedatecolormap_deinvert_colors_deintervalexpe_defill_devarr   r   r  rQ  rR  r   ri   rm   rY   r	  r
  r+  r   s                           r   
plotFieldsrg  C  s    4y8#R(..0 	 Aty Q4	  t#tt$DDT>KLn&D.KLt^KLt^KL!'* P	2HE1%.C'#-?#E		SVYY\bbemmE'!%(002'30JD$ '!A:T*1177%:?:=DOEQ=ACGCSCSCUBFBF>B4[>A'lT>QTWX[T\>\_e>ehklthu>ux|>|  @C  DH  @I  ?I  LO  ?O 8 
PB "&&d&+22885:?:=DOEQ=ACGCSCSCUBFBF>B4[>A'lT>QTWX[T\>\_e>ehklthu>ux|>|  @C  DH  @I  ?I  LO  ?O 9 
P 
PB I%A:T*1199E:?:=DOEQ=ACGCSCSCUBFBF>B4[?GCD>A'lT>QTWX[T\>\_e>ehklthu>ux|>|  @C  DH  @I  ?I  LO  ?O : PB  "&&d&+22::U:?:=DOEQ=ACGCSCSCUBFBF>B4[?GCD>A'lT>QTWX[T\>\_e>ehklthu>ux|>|  @C  DH  @I  ?I  LO  ?O ; P PB ~19 ZZ-2257;F ZZ-2215FRD)..q1aP	2d r[   c                     t        j                  t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            dd	
      t        j                  t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t        t         j                  j                  dd            t        j                  t         t         j                  j                  dd            t        j                  t"        t         j                  j                  dd            dd

      t        j                  t        j                  t$        t         j                  j                  dd            t        j                  t&        t         j                  j                  dd            t        j                  t(        t         j                  j                  dd            t        j                  t*        t         j                  j                  dd            t        j                  t,        t         j                  j                  dd            t        j                  t.        t         j                  j                  dd            t        j                  t0        t         j                  j                  dd            t        j                  t2        t         j                  j                  dd            t        j                  t4        t         j                  j                  dd            t        j                  t6        t         j                  j                  dd            dd
      d } t.        j8                  j;                  | d       fd}j8                  j;                  |d       j8                  j;                  |d       j8                  j;                  |d       gat        j                  ddd	
      }t        j>                  |      S )NzChoose a variable and levelr8   )r:   alignzChoose a regionzChoose a referencezChoose one experimentzChoose one or more experimentszTime SeriesF)r   	collapsedzChoose a statisticzChoose a scorezChoose a experimentzChoose a colormapz&Invert the color range in the colormap	ScorecardTzChoose a datez,Choose the contour invervals (min=5, max=30)zSpatial Distributionc                 p    | j                   dk(  rdt        _        y | j                   dk(  rdt        _        y y )NrM   FrL   T)r   rc  r?   r   s    r   toggle_widgetsz,LayoutSidebarObjEval.<locals>.toggle_widgets  s/    yyI%$)!g%$(! &r[   r:   c                     | j                   dk(  rX| j                  u rd_        d_        y | j                  u rd_        d_        y | j                  u rd_        d_        y y y )NFT)r   objrj  )r   card1card2card3s    r   toggle_cardsz*LayoutSidebarObjEval.<locals>.toggle_cards  sg    yyE!99%&*EO&*EOYY%'&*EO&*EOYY%'&*EO&*EO ( "r[   rj  zClick to expand cards.
Parameters) r   CardRowr   r   TooltipIconr   r   r   r   r2  r3  r4  r5  r6  r7  r8  r9  r`  stater]  r^  r_  re  rc  ra  rb  rd  r   r   cards_objevalr   )rm  rs  card_parametersrp  rq  rr  s      @@@r   LayoutSidebarObjEvalr{    s/   y"***@*@Gdls*@*tuvrzz'='=DU]d'='efvrzz'='=DX`g'='hiz2::+A+AH_gn+A+opw

(>(>Eemt(>(uv+u> x)?)?FZbi)?)jkubjj&<&<CS[b&<&cdvrzz'='=DU]d'='efvrzz'='=DX`g'='hiubjj&<&<CX`g&<&hiubjj&<&<CX`g&<&hi{BJJ,B,BI\dk,B,lm/1G1GNv  F1G  2G  H)T; tRZZ%;%;/Y`%;%abubjj&<&<CW_f&<&ghy"***@*@Gdls*@*tuvrzz'='=DU]d'='efvrzz'='=DX`g'='hiw

(>(>EZbi(>(jkx)?)?Ft  }D)?  *E  F{BJJ,B,BI\dk,B,lm/1G1GNv  F1G  2G  Hw

(>(>EZbi(>(jk4
F	) 	NG4
	+ 	,4,4,4 u-''":E5%Wcotuyy))r[   c            	      r   t        j                  d      } t        j                  dt        j                  dt              fdt        j                  dt              fdt        j                  dt
              fd	      }d
 }|j                  j                  |d       t        j                  | |t        d      S )N
        # Objective Evaluation

        Set the parameters on the left to update the map below and explore our analysis features. Click on the `TABLE` tab to get an overview of the calculated statistics.
        zTIME SERIESzTime series of bias, root mean square error and anomaly correlation for a variable and level for a particular region with respect to a climatology.	SCORECARDzScorecard of bias, root mean square error and anomaly correlation for all variables and levels for a time range over a particular region with respect to a climatology.zSPATIAL DISTRIBUTIONzSpatial distribution of bias and root square error for a variable and level for a particular region with respect to a climatology.T)dynamicc                 ^    | j                   }t        t              D ]  \  }}||k7  |_         y rU   )r   r   ry  rj  )r   rg   r   cards       r   on_tab_changez(LayoutMainObjEval.<locals>.on_tab_change   s.    IIE$]3 ,4!"e,r[   r   stretch_bothr   )	r   r   r   r   rC  rg  r   r   monitor_warning_bottom_main)	main_texttabs_objevalr  s      r   LayoutMainObjEvalr    s    II  	 wwryy  :O  Q[  0\   ]!,bii  9b  dq  /r  !s!7  DH  JT  :U  !V(,.	, 	  9yyL3N\jkkr[   c                  Z    t        j                  d      } t        j                  | d      S Nr}  r  r   r   r   r  s    r   r{  r{    s(    II  	 yy??r[   c                  Z    t        j                  d      } t        j                  | d      S r  r  r  s    r   r  r    s(    II  	 yy??r[   )sosr   r   r   colorcetccxarrayxrnumpyr  pandasr  	geopandasgpdseabornr"  panelr   r   hvplot.xarrayr   hvplot.pandashv	holoviewsr   cartopy.crscrsrZ  cartopy.featurefeaturecfeaturexyzservices.providers	providersxyzr   
matplotlibr   r   monitor_textsr   monitor_datesr   	extensionmonitor_app_textswarningsr  r   data_catalog_filedata_existsrd   r   rc   r  listtmp_listr#  RegsStatsExpsRefstmpre   rY   rM  r   titf	Timestampto_pydatetimedateidatefr   
DateSliderr`  Selectr   r   r   r   MultiChoicer   TstatsColorMap	palette_nr8  Checkboxr9  r2  r3  r4  r5  r6  r7  Fillsre  ra  rb  IntInputrc  rx  r\  r]  r^  r_  rd  r   rZ   ro   r   dependsr   rC  rg  r{  r  )ltupler   s   00r   <module>r     s   
 	                " #  $ , , g  W  \  \  4    )
 '( /88:  L *+q>/03L+DZ 155fq	!5HL!H<8<<=DEHEEFED8DDED<8<<=D |
Q
C	c				!B		B		BBLL**,EBLL**,E::  fEuEZdlo pD 

!!z$;OQAaD;OfjWkabXYZ[X\WklmWny~  GJ!  KIZZHd$q'TYadeFZZKT!WW\dghF""(<dRVWXRYdhps"tJjj$$*?VZ[\V]U^inv{  DG$  HG  !45F**%%:r||Xbjm  wC%  DKzz**tSV*Wzz  k5a[`hk lHJJ66UZbefEZZHd$q'TYadeFZZKT!WW\dghFJJ>4tAwY^fijEJJ>4tBxZ_gjkE i EjjVU#FG**%%:r||Xbjm  wC%  DKzz**tSV*Wzz""2AQTV^alp"qHJJ;U1XX]ehiEjj[%uQxZ_gjkG

!!z$;OQAaD;OfjWkabXYZ[X\WklmWny~  GJ!  KIZZHd$q'TYadeFZZKT!WW\dghFjj$$-dSTgYafns{~$G ZZ  &;4RV WFD KRZZ	667JGD HDL RZZ%{L\^deo fob RZZFFD+GWYacjlstn un`=*~l2@@I 6> <PWk6 <PWks   Y	Y
,YY
/Y