o mgN@sddlZddlZddlZddlZddlZddlZddlZe d ddZ ddZ ddZ d d Z d d Zd dZddZddZddZddZddZddZddZddZdS)Nignorec7 Cstt|dddd}t|ddd} t|dd} ttd|dttd|dttd|dttd|dd} d D]} | | d } | | d }t| d krt|d kr|D]j}tt|d d dd}t|d dd}t|dd}tj|| | |||d}|}t|d}t|dd}t|dd}t| d t| d t| d }| | d  |qft|d krLt| d krL| D]j}tt|d d dd}t|d dd}t|dd}tj|| | |||d}|}t|d}t|dd}t|dd}t| d t| d t| d } | | d  | qqIdD]K} | d| d}!| d| d}"t|!d kr}t|"d kr}| d| d| d| d<t|"d krt|!d kr| d| d| d| d<qOi}#d| d| fD]} | | d}$t|$d krQt |$}%t |$}&|%|&kst|$dkrtjdd}'n^g}(tt|$D]<})|$|)|&kr|( tjddtj|$|)dtjddq|( tj|$|)ddtj|$|)dqt|(}*t|*|*d kr,|*d }'nt |*}'tj||%d}+tj||&d},t|+|,|'|'tj}-ng}-|-|#| d<q|dkrcd}.n|dkrjd}.tjtt|ddd| | d}/|.dkrd|/}/d D]} |#| d| d|/|#| d|. d<q|#d| d}-|#d}0g}1g}2|-D]}3|3}4|4jd|4jd|4j}5|1 |-|5dq|#d}0g}2|0D] }6|2 |6d q|1|2fS)!a^! Create arrays of requested dates plotting and dates expected to be in MET .stat files Args: date_type - string of describing the treatment of dates, either VALID or INIT date_beg - string of beginning date, either blank or %Y%m%d format date_end - string of end date, either blank or %Y%m%d format fcst_valid_hour - string of forecast valid hour(s) information, blank or in %H%M%S fcst_init_hour - string of forecast init hour(s) information, blank or in %H%M%S obs_valid_hour - string of observation valid hour(s) information, blank or in %H%M%S obs_init_hour - string of observation hour(s) information, blank or in %H%M%S lead - string of forecast lead, in %H%M%S format Returns plot_time_dates - array of ordinal dates based on user provided information expected_stat_file_dates - array of dates that are expected to be found in the MET .stat files based on user provided information, formatted as %Y%m%d_%H%M%S Ni<z, )Zfcst_valid_timeZfcst_init_timeZobs_valid_timeZ obs_init_time)ZfcstobsZ _valid_timeZ _init_timer)seconds)validinitZfcst__timeZobs_iQZ235959z%H%M%Sz %Y%m%d%H%M%SZ_datesVALIDINIT_Zfcst_valid_datesg@z %Y%m%d_%H%M%S)intlistfiltersplitlendatetime timedelta total_secondsstrzfillappendlowerminmaxrangestrptimenparrayallarangeastypetimehourminutesecond toordinalstrftime)7 date_typedate_begdate_endZfcst_valid_hourZfcst_init_hourZobs_valid_hourZ obs_init_hourleadZlead_hour_secondsZlead_min_seconds lead_secondsZvalid_init_time_infotypeZvalid_time_listZinit_time_listZitimeZitime_hour_secondsZitime_min_secondsZ itime_secondsoffsetZtot_sec valid_hourZ valid_minZ valid_sec valid_timeZvtimeZvtime_hour_secondsZvtime_min_secondsZ vtime_seconds init_hourZinit_minZinit_secZ init_timeZfcst_time_listZ obs_time_listZ date_infoZ time_listZtime_begZtime_enddelta_tZ delta_t_listtZ delta_t_arraybegenddatesZoppo_date_typeZlead_timedeltaZfv_datesZplot_time_datesZexpected_stat_file_datesdatedtr Zfv_dater?:/lfs/h1/ops/prod/packages/evs.v1.0.19/ush/aqm/plot_util.pyget_date_arrayss<                             rAcCs|d}d}d}|D]}|dkrq |}dD]}||vr$|}||d}q|dvr6|d|7}|d|7}q |dvrG|d|7}|d |7}q |d vrX|d |7}|d |7}q |d vri|d|7}|d|7}q |dvrz|d|7}|d|7}q |dvr|d|7}|d|7}q ||fS)a/! Format thresholds for file naming Args: thresh - string of the threshold(s) Return: thresh_symbol - string of the threshold(s) with symbols thresh_letters - string of the threshold(s) with letters  ) >=>==!=<=<gegteqnelelt)rErKrErK)rDrJrDrJ)rIrOrIrO)rHrNrHrN)rFrLrFrL)rGrMrGrM)rreplace)threshZ thresh_listZ thresh_symbolZ thresh_letterZ thresh_valueoptZ thresh_optr?r?r@ format_threshs@         rScCs(t|}|dkrgd}|Sgd}|S)a! Get the standard MET .stat file columns based on version number Args: met_version - string of MET version number being used to run stat_analysis Returns: stat_file_base_columns - list of the standard columns shared among the different line types g333333 @)VERSIONMODELDESC FCST_LEADFCST_VALID_BEGFCST_VALID_ENDOBS_LEAD OBS_VALID_BEG OBS_VALID_ENDFCST_VARFCST_LEVOBS_VAROBS_LEVOBTYPEVX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESHALPHA LINE_TYPE)rTrUrVrWrXrYrZr[r\r] FCST_UNITSr^r_Z OBS_UNITSr`rarbrcrdrerfrgrhri)float) met_versionZstat_file_base_columnsr?r?r@get_stat_file_base_columnss rmcCst|}|dkr|dkrgd}|S|dkr |dkrgd}|S|dkr8|dkr.gd}|S|d kr6gd }|S|d krF|dkrDgd }|S|d kra|d krTgd}|S|d|td|S|dkry|dkrogd}|S|dkrwgd}|S|dkr|dkrgd}|S)a! Get the MET .stat file columns for line type based on version number Args: met_version - string of MET version number being used to run stat_analysis line_type - string of the line type of the MET .stat file being read Returns: stat_file_line_type_columns - list of the line type columns SL1L2g@)TOTALFBAROBARFOBARFFBAROOBARMAESAL1L2)roFABAROABARFOABARFFABAROOABARruVL1L2gffffff@)roUFBARVFBARUOBARVOBARUVFOBARUVFFBARUVOOBARg@) ror}r~rrrrr F_SPEED_BAR O_SPEED_BARVAL1L2)roUFABARVFABARUOABARVOABARUVFOABARUVFFABARUVOOABARVCNT)7rorpFBAR_NCLFBAR_NCUrqOBAR_NCLOBAR_NCUFS_RMSZ FS_RMS_NCLZ FS_RMS_NCUOS_RMSZ OS_RMS_NCLZ OS_RMS_NCUMSVEZMSVE_NCLZMSVE_NCURMSVEZ RMSVE_NCLZ RMSVE_NCUFSTDEV FSTDEV_NCL FSTDEV_NCUOSTDEV OSTDEV_NCL OSTDEV_NCUFDIRZFDIR_NCLZFDIR_NCUODIRZODIR_NCLZODIR_NCU FBAR_SPEEDZFBAR_SPEED_NCLZFBAR_SPEED_NCU OBAR_SPEEDZOBAR_SPEED_NCLZOBAR_SPEED_NCU VDIFF_SPEEDZVDIFF_SPEED_NCLZVDIFF_SPEED_NCU VDIFF_DIRZ VDIFF_DIR_NCLZ VDIFF_DIR_NCU SPEED_ERRZ SPEED_ERR_NCLZ SPEED_ERR_NCU SPEED_ABSERRZSPEED_ABSERR_NCLZSPEED_ABSERR_NCUDIR_ERRZ DIR_ERR_NCLZ DIR_ERR_NCU DIR_ABSERRZDIR_ABSERR_NCLZDIR_ABSERR_NCUz%VCNT is not a valid LINE_TYPE in METVrCTCg&@)roFY_OYFY_ONFN_OYFN_ONZEC_VALUE)rorrrrNBRCNT)roFBSFBS_BCLFBS_BCUFSSFSS_BCLFSS_BCUAFSSAFSS_BCLAFSS_BCUUFSSUFSS_BCLUFSS_BCUF_RATE F_RATE_BCL F_RATE_BCUO_RATE O_RATE_BCL O_RATE_BCU)rkerrorexit)loggerrl line_typeZstat_file_line_type_columnsr?r?r@get_stat_file_line_type_columnssL >94/)# rcs>tt|t|krtt|}t|}n t|}dt|}|dkr8||d}||d}n|dkrH||d}||d}|dkr[t|dd}t|dd}nt|dd}t|dd}d}|d |dtjfd d t|Dtd }tj|dd td d}t|d d d|}|S)a}! Get contour levels for plotting differences or bias (centered on 0) Args: data - array of data to be contoured spacing - float for spacing for power function, value of 1.0 gives evenly spaced contour intervals Returns: clevels - array of contour levels rdg? g?rr?cs g|] }d|qS)rr?.0idxspacingspanr?r@ s zget_clevels..dtypeN) r#absnanminnanmaxroundr$r!rkr)datarcmaxcminstepsposnegZclevelsr?rr@ get_clevelsas2       rc Cs:t|dddf}|dkr.tt|dddfD]}tj||ddf||<q|S|dkr`tt|dddfD]}|tj||ddftj||ddf||<q>|S|dkr|jd}| d dg}t |||||_ ttt dddfD]}t |||<q|S|dtd |S) a+! Calculate average of dataset Args: logger - logging file average_method - string of the method to use to calculate the average stat - string of the statistic the average is being taken for model_dataframe - dataframe of model .stat columns model_stat_values - array of statistic values Returns: average_array - array of average value(s) NrZMEANZMEDIANZ AGGREGATIONmodel_plot_namesumz?Invalid entry for MEAN_METHOD, use MEAN, MEDIAN, or AGGREGATIONr)r# empty_liker!rmameaninfomedianshapegroupbyaggcalculate_statcolumnsZ avg_arrayrr) raverage_methodstatZmodel_dataframeZmodel_stat_valuesZ average_arraylndaysZmodel_dataframe_aggsumr?r?r@calculate_averages,  rc% Cs|dkrw||}|tj|} |} t|| d} | dkr0d| t| d} | S| dkrE| dkrEd| t| d} | S| dkrZ| dkrZd | t| d} | S| dkro| d krod | t| d} | S| d krud } | S|d krd\} }g}|jjD] }||dqt|} t j j dgtj d|dt d|ggdd}t j j dgtj d|dt d|ggdd}t jtj||jd}t jtj||jd}t|j}t|| |g}t|| |g}t|dd k}t|dd k}|j|dddf||d |dddf<|j|dddf||d |dddf<|j|dddf||d |dddf<|j|dddf||d |dddf<d} | |kr|| dddddf|jd| f<|| dddddf|jd| f<| d7} | |ksZtj} t|||\}}}t|||\}}}t|||||d d ddddf}t|||||d d ddddf} | |}!t|!|}"t|!|"d}#t|#|d}$d|$} | S|dtd| S)a3! Calculate confidence intervals between two sets of data Args: logger - logging file ci_method - string of the method to use to calculate the confidence intervals modelB_values - array of values modelA_values - array of values total_days - float of total number of days being considered, sample size stat - string of the statistic the confidence intervals are being calculated for average_method - string of the method to use to calculate the average randx - 2D array of random numbers [0,1) Returns: intvl - float of the confidence interval ZEMCrPg\(\?r(@gtV@rgm@z--ZEMC_MONTE_CARLO)ri'Zrand1r)rntestr<)namesZrand2)indexrg?Nz:Invalid entry for MAKE_CI_METHOD, use EMC, EMC_MONTE_CARLO)r#r count_maskedrsqrtrvaluesrrpd MultiIndex from_productr&r DataFramenanremptywhereiloclocrrrrr)%r ci_methodZ modelB_valuesZ modelA_valuesZ total_daysrrZrandxZmodelB_modelA_diffrZmodelB_modelA_diff_meanZmodelB_modelA_stdZintvlrZntestsr<Zidx_valZrand1_data_indexZrand2_data_indexZ rand1_dataZ rand2_dataZncolumnsZrand1_data_valuesZrand2_data_valuesZ randx_ge0_idxZ randx_lt0_idxZrand1_stat_valuesZrand1_stat_values_arraystat_plot_nameZrand2_stat_valuesZrand2_stat_values_arrayZrand1_average_arrayZrand2_average_arrayZ scores_diffZscores_diff_meanZscores_diff_varZscores_diff_stdr?r?r@ calculate_cisNLJHF    $$      rcCs|dkrd}|S|dkrd}|S|dkrd}|S|dkr d}|S|d kr(d }|S|d kr0d }|S|d kr8d}|S|dkr@d}|S|dkrHd}|S|dkrPd}|S|dkrXd}|S|dkr`d}|S|dkrhd}|S|dkrpd}|S|dkrxd}|S|dkrd }|S|d!krd"}|S|d#krd$}|S|d%krd&}|S|d'krd(}|S|d)krd*}|S|d+krd,}|S|d-krd.}|S|d/krd0}|S|d1krd2}|S|d3krd4}|S|d5krd6}|S|d7krd8}|S|d9krd:}|S|d;krd<}|S|d=krd>}|S|d?krd@}|S|dAkr dB}|S|dCkrdD}|S|dEkrdF}|S|dGkr%dH}|S|dIkr.dJ}|S|dKkr7dL}|S|dMkr@dN}|S|dOkrIdP}|S|dQkrRdR}|S|dSkr[dT}|S|dUkrddV}|S|dWkrmdX}|S|dYkrvdZ}|S|d[krd\}|S||d]td^|S)_a#! Get the formalized name of the statistic being plotted Args: stat - string of the simple statistic name being plotted Returns: stat_plot_name - string of the formal statistic name being plotted mezMean Error (i.e., Bias)rmsezRoot Mean Square Errorbcrmsez%Bias-Corrected Root Mean Square Errormsessz&Murphy's Mean Square Error Skill ScorersdzRatio of the Standard Deviationrmse_mdz&Root Mean Square Error from Mean Errorrmse_pvz-Root Mean Square Error from Pattern VariationpcorzPattern CorrelationacczAnomaly Correlation Coefficientfbarz Forecast MeanobarzObservation Mean fbar_obarzForecast and Observation MeanfsszFractions Skill Scoreafssz Asymptotic Fractions Skill ScoreufsszUniform Fractions Skill Score speed_errz5Difference in Average FCST and OBS Wind Vector Speedsdir_errz8Difference in Average FCST and OBS Wind Vector Directionrmsvez(Root Mean Square Difference Vector Error vdiff_speedzDifference Vector Speed vdiff_dirzDifference Vector Directionfbar_obar_speedzAverage Wind Vector Speed fbar_obar_dirzAverage Wind Vector Direction fbar_speedz"Average Forecast Wind Vector Speedfbar_dirz&Average Forecast Wind Vector DirectionoratezObservation Ratebaserz Base Ratefratez Forecast Rate orate_fratezObservation and Forecast Rates baser_fratezBase and Forecast RatesaccuracyZAccuracyfbiaszFrequency BiaspodzProbability of DetectionhratezHit RatepofdzProbability of False DetectionfaratezFalse Alarm Ratepodnz)Probability of Detection of the Non-EventfaratiozFalse Alarm RatiosratiozSuccess Ratio (1-FAR)csizCritical Success Indextsz Threat ScoregsszGilbert Skill ScoreetszEquitable Threat ScorehkzHanssen-Kuipers DiscriminanttsszTrue Skill ScorepsszPeirce Skill ScorehsszHeidke Skill Score is not a valid optionr)rr)rrrr?r?r@get_stat_plot_names b`^\ZXVTRPNLJHFD@<:86420.,*(&$"               r3c s d}|jdd|jjdgkrO|dd} |dks&|dks&|d krD|jd d dg} |jd d d} |jd d d} n|jd d d} nt|rWd} nd } tfd d dDrd} |jd d d}|jd d d|jd d d}|jd d d}|jd d d}|jd d d}| r|\}}}|}||||||}t |d|||||||t |d}t |d|d|||t |d}t |d|d|||t |d}ntfdd dDrgd} |jd d d}|jd d d}|jd d d}|jd d d}|jd d d}|jd d d}| re|\}}||}||}t |d|}t |d|}t |d|}ntfdd d Dr0d!} |jd d d}|jd d d"}|jd d d#}|jd d d$}|jd d d%}|jd d d&} |jd d d'}!|jd d d(}"| r.|\}}|}#|}$|}%|}&||#|}||$|}||%|}||&|}t |d| |||#|%|$|&t |d} t |d|!d|||#|$t |d}!t |d|"d|||%|&t |d}"ntfd)d d*Drd+} |jd d d}|jd d d,}'|jd d d-}(|jd d d.})|jd d d/}*|jd d d0}+|jd d d1},|jd d d2}-| r|\}}||'}'||(}(||)})||*}*t |d|+}+t |d|,},t |d|-}-nKtfd3d d4Drod5} |jd d d}|jd d d|jd d d}|jd d d6}.|jd d d7}/|jd d d8}0|jd d d9}1|jd d d:}2|jd d d;}3|jd d d<}4|jd d d=}5|jd d d>}6|jd d d?}7|jd d d@}8|jd d dA}9|jd d dB}:|jd d dC};| rn| dD| dEt dFntfdGd dHDrdI} |jd d d}|jd d dJ}<|jd d dK}=|jd d dL}>|jd d dM}?nWtfdNd dODrdP} |jd d d}|jd d dQ|jd d dR}@|jd d dS}A|jd d dT}B|jd d dU}C|jd d dV}Dn | dWt dFt | dXkr||kr5|dYdZ|d[d\|dF}tttjgtjg|gd]Sd^d_|d}Ed^|E}F| dIkrz|<}G|=}H|>}I|?}J|}Kt|G|H|I|Jg}L|L|Kt}Mtjj|K|M|d`j\}N}O}P}Qn| dkr g|}R|||}S||}Tt|D]+\}U}Vtjj|U||Ug|R|U|T|Ug|T|U|S|Uggt||Ud`}W|Wqtd d df}Xd d dFf}YttjdFda}Ztd d dfd d df}[td d dFfd d dFf}\db}]|]dcdd}^t|^t }_g}`g}ag}bg}cg}d|_dFkrt!|D]B}Vtjj"t j#dde}e|ej\}f}g|`|f|a|g|bt|f|g|ct|f|f|dt|g|gq/t|`}ht|a}it|b}jt|c}kt|d}lnt$d|}mt!d||_D]W}nt |m|n|n|_}ofdfdgt!|oDfdhdgdiD\}f}g|`|fjdFda|a|gjdFda|b|f|gjdFda|c|f|fjdFda|d|g|gjdFdaqt%|`}ht%|a}it%|b}jt%|c}kt%|d}ln1| | dj|t dFn!t | dkk r2|j#|krM|dldZ|j#d[d\|dF}tttjgtjg|gd]Sd^d_|d}Ed^|E}F| dIkrt|<|=|>|?g}pdmdgt!dnD\}N}O}P}Qt!|D]7}V|pjtjj"t!t |pjt |pjddejdda}q|N|qd|O|qdF|P|qd|Q|qdoqxt|N}Nt|O}Ot|P}Pt|Q}Qnw| dkr}X|}Y|}Z|}[|}\db}]|]dcdd}^t|^t }_g}rg}sg}tg}ug}v|_dFkrct!|D]E}Vtjj"t j#ddefdpdg||||fD\}w}x}y}z}{|r|w|s|x|t|y|u|z|v|{qt|r}ht|s}it|t}jt|u}kt|v}lnt$d|}mt!d||_D]Z}nt |m|n|n|_}ofdqdgt!|oDfdrdgt||||gD\}w}x}y}z}{|r|wjdFda|s|xjdFda|t|yjdFda|u|zjdFda|v|{jdFdaqot%|r}ht%|s}it%|t}jt%|u}kt%|v}lnX| dPk r&}||@}}|A}~|B}|C}|D}db}]|]dcdd}^t|^t }_g}g}g}g}g}g}|_dFkrt!|D]N}Vtjj"t j#ddefdsdg|@|A|B|C|DfD\}}}}}}||||||||||||q't|}t|}t|}t|}t|}t|}nt$d|}mt!d||_D]e}nt |m|n|n|_}ofdtdgt!|oDfdudgt|@|A|B|C|DgD\}}}}}}||jdFda||jdFda||jdFda||jdFda||jdFda||jdFdaqt%|}t%|}t%|}t%|}t%|}t%|}n| | dvt dFn | |dwt dF|dxk rot | dyv rm| dk r`t|Xt|Y}|h|i} n| dIk rm|N|O|N|P} nw|dzk rt | dyv r| dk rt&|[|\d|Z}t|}t&|k|ld|j} nG|d{k r t | dyv r| dk rt|[t|Xt|X}t|\t|Yt|Y}t|Zt|Xt|Y}t&||d|}|k|h|h}|l|i|i}|j|h|i}t&||d|} n|d|k rKt | dyv rI| dk rI|[|\d|Z}|\|Y|Y}dF||}t|}|k|ld|j}|l|i|i}dF||} n|d}k rt | dyv r| dk r|[|X|X}|\|Y|Y}t&|t&|}t|}|k|h|h}|l|i|i}t&|t&|} nU|d~k rt | dyv r| dk rt&|X|Yd}t|}t&|h|id} n)|dk r1t | dyv r/| dk r/|[|Xd}|\|Yd}|Z|X|Y}|t&||}t&||dt&|||}t|}|k|hd}|l|id}|j|h|i}|t&||}t&||dt&|||} n|dk rt | dyv r| dk r|[|X|X}|\|Y|Y}|Z|X|Y}|t&||}t|}|k|h|h}|l|i|i}|j|h|i}|t&||} ne|dk rt | dyv r| dk rt't(t(}t)t*t*}t+t(t*}|t&||}t|}t,t-t-}t.t/t/}t0t-t/}t1t&t2t3} n|dk rt | dyv r| dk r|X}t|}|h} n|dk r t | dyv r | dk r |Y}t|}|i} n|dk r)t | dyv r'| dPk r't|}}|} n|dk rEt | dyv rC| dPk rCt|~}|} n|dk rat | dyv r_| dPk r_t|}|} n|dk sk|dk r| dIk rt|<t|=t|>t|?}t|<t|>|}|N|O|P|Q}|N|P|} nF| dPk rt|D}|} n8|dk r| dIk rt|<t|=t|>t|?}t|<t|=|}|N|O|P|Q}|N|O|} n| dPk rt|C}|} n|dk s|d k rW| dIk rUt|<t|=t|>t|?}t|<t|=|}t|<t|>|}t4||g}|N|O|P|Q}|N|O|} |N|P|} tj4| | gdFda} n|dk r| dIk rt|<t|=t|>t|?}t|<t|?|}|N|O|P|Q}|N|Q|} nU|dk r| dIk rt|<t|=t|<t|>}|N|O|N|P} n-|dk s|dk r| dIk rt|<t|<t|>}|N|N|P} n|dk s|dkr| dIkrt|=t|=t|?}|O|O|Q} n|dkr&| dIkr$t|?t|=t|?}|Q|O|Q} n|dkrG| dIkrEt|=t|=t|<}|O|O|N} n|dkrl| dIkrjd_t|=t|=t|<}d_|O|O|N} nz|dksv|dkr| dIkrt|<t|<t|=t|>}|N|N|O|P} nM|dks|dkr | dIkrt|<t|=t|>t|?}t|<t|=t|<t|>|}t|<|t|<t|=t|>|}|N|O|P|Q}|N|O|N|P|}|N||N|O|P|} n|dks|dks|dkrV| dIkrUt|<t|?t|=t|>t|<t|>t|=t|?}|N|Q|O|P|N|P|O|Q} n|dkr| dIkrt|<t|=t|>t|?}t|<t|=t|<t|>}t|>t|?t|=t|?}|||}t|<t|?|||}|N|O|P|Q}|N|O|N|P}|P|Q|O|Q}|||}|N|Q|||} n | |dwt dF| |}t5||E}t5||F}tt|g|g|gd]S)a! Calculate the upper and lower bound bootstrap statistic from the data from the read in MET .stat file(s) Args: bs_method - string of the method to use to calculate the bootstrap confidence intervals model_data - Dataframe containing the model(s) information from the MET .stat files stat - string of the simple statistic name being plotted nrepl - integer of resamples that create the bootstrap distribution level - float confidence level (0.-1.) of the confidence interval bs_min_samp - minimum number of samples allowed for confidence intervals to be computed Returns: stat_values - Dataframe of the statistic values lower and upper bounds status - integer to provide the parent script with information about the outcome of the bootstrap resampling rT)inplaceroEmpty model_data dataframeNULLrrr NFc3|]}|vVqdSNr?relemmodel_data_columnsr?r@ z)calculate_bootstrap_ci..rprqrurnrprqrrrsrtrrc3r7r8r?r9r;r?r@r=r>rwrxrurvrwrxryrzr{c3r7r8r?r9r;r?r@r=r>r}r~r|r}r~rrrrrc3r7r8r?r9r;r?r@r=r>rrrrrrrrrrc3r7r8r?r9r;r?r@r=)r>rrrrrrrrrrrrrrrrrz&Cannot convert columns for line_type ""rc3r7r8r?r9r;r?r@r=Br>rrrrrrrc3r7r8r?r9r;r?r@r=Jr>rrrrrrrrrrrrr*Could not recognize line type from columns MATCHED_PAIRSz2Sample too small for bootstrapping. (Matched pairsz sample size: z; minimum samplez size: )CI_LOWERCI_UPPERSTATUSgY@r)sizeaxis g.ArLrPc$g|]}tjjtjddqSTrQr#randomchoicerrLrr)fo_matched_estr?r@rz*calculate_bootstrap_ci..csg|] }tj|qSr?)r#takeTr)rXidxsr?r@rs)rrz3 is not currently a valid option for bootstrapping FORECASTSz.Sample too small for bootstrapping. (ForecastscSsg|]}gqSr?r?)ritemr?r?r@rsr cg|]}|jqSr?r[r summary_statidxr?r@rcrRrSrTrW)r r?r@rrYc"g|] \}}tt|qSr?r#rZr$rsrcr\r?r@rcr`r?rarbrdr?r@r5rfcrRrSrTrW)fbsr?r@rIrYcrgr?rhrirkr?r@rQrlz is not currently a valid optionr2r)rHr]rrrrr r r r r rrrrrrrr!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1)6 reset_indexrrtolistwarningrr#anyr%powerrrrupperrrrdictrr$r'rkrU multinomialr[ enumeratemultivariate_normalrrvstackrprodrr!rVrLr& concatenaterZffabar_est_meanZfabar_est_meanZooabar_est_meanZoabar_est_meanZfoabar_est_meanZffabar_est_sampZfabar_est_sampZooabar_est_sampZoabar_est_sampZfoabar_est_sampZ covar_sampZ var_f_sampZ var_o_sampconcat nanpercentile)r bs_method model_datarZnrepllevel bs_min_samp conversionstatusr stat_valuesstat_values_fbarstat_values_obar bool_converttotalrfobarffbaroobarcoefconstfbar_ogobar_ogfabaroabarfoabarffabarooabarufbarvfbaruobarvobaruvfobaruvffbaruvoobarufbar_ogvfbar_oguobar_ogvobar_ogufabarvfabaruoabarvoabaruvfoabaruvffabaruvooabarfs_rmsos_rmsmsverfstdevostdevfdirodirr obar_speedrrrrfy_oyfy_onfn_oyfn_onrrrrrZ lower_pctileZ upper_pctileZ fy_oy_allZ fy_on_allZ fn_oy_allZ fn_on_allZ total_allZctc_allZ prob_ctc_allZ fy_oy_sampZ fy_on_sampZ fn_oy_sampZ fn_on_sampZfvarZovarZfocovarrrZfo_matched_est_iZ fbar_est_meanZ obar_est_meanZfobar_est_meanZffbar_est_meanZoobar_est_meanZmax_mem_per_arrayZmax_array_sizeZ batch_sizeZfbar_est_samplesZobar_est_samplesZfobar_est_samplesZffbar_est_samplesZoobar_est_samplesZfo_matched_indicesZf_est_bsZo_est_bsZ fbar_est_sampZ obar_est_sampZfobar_est_sampZffbar_est_sampZoobar_est_sampZrep_arrbZcurr_batch_sizeZctcZctc_bsZ fbar_samplesZ obar_samplesZ fobar_samplesZ ffbar_samplesZ oobar_samplesZfbar_bsZobar_bsZfobar_bsZffbar_bsZoobar_bsZ fbs_est_meanZ fss_est_meanZ afss_est_meanZ ufss_est_meanZfrate_est_meanZorate_est_meanZ fbs_samplesZ fss_samplesZ afss_samplesZ ufss_samplesZ frate_samplesZ orate_samplesZfbs_bsZfss_bsZafss_bsZufss_bsZfrate_bsZorate_bsZ fbs_est_sampZ fss_est_sampZ afss_est_sampZ ufss_est_sampZfrate_est_sampZorate_est_sampZstat_values_meanZstat_values_pre_meanZ var_f_meanZ var_o_meanZ covar_meanvar_fvar_ocovarZmse_meanmseZR_meanRZ total_meanZstat_values_fbar_meanZstat_values_obar_meanZC_meanCZCa_meanZCb_meanCaCbZ stat_deltasZ stat_ci_lowerZ stat_ci_upperr?)r rmrXrer\r<r@calculate_bootstrap_cis                                         &&                                                                                                    $                                  &    &   &    &                  &   &  &    rcS s|jjdgkrG|dd}|dks|dks|dkr<|jdddg}|jddd}|jddd}n|jddd}nt|rOd}nd }tfd d d Drd }|jddd} |jddd} |jddd} |jddd} |jddd} |r|\}}| }| }|||} |||} t|d| ||||||t|d} t|d| d|||t|d} t|d| d|||t|d} ntfdd dDrMd}|jddd}|jddd}|jddd}|jddd}|jddd}|rK|\}}||}||}t|d|}t|d|}t|d|}ntfdd dDr d}|jddd }|jddd!}|jddd"}|jddd#}|jddd$}|jddd%}|jddd&}|r |\}}|}|}|} |}!|||}|||}|| |}||!|}t|d||||| ||!t|d}t|d|d||||t|d}t|d|d||| |!t|d}ntfd'd d(Drd)}|jddd*}"|jddd+}#|jddd,}$|jddd-}%|jddd.}&|jddd/}'|jddd0}(|r|\}}||"}"||#}#||$}$||%}%t|d|&}&t|d|'}'t|d|(}(nBtfd1d d2Dr:d3}|jddd} |jddd} |jddd4})|jddd5}*|jddd6}+|jddd7},|jddd8}-|jddd9}.|jddd:}/|jddd;}0|jddd<}1|jddd=}2|jddd>}3|jddd?}4|jddd@}5|jdddA}6|r9| dB|dCt dDntfdEd dFDrvdG}|jddd}7|jdddH}8|jdddI}9|jdddJ}:|jdddK};nWtfdLd dMDrdN}|jddd}7|jdddO}<|jdddP}=|jdddQ}>|jdddR}?|jdddS}@|jdddT}An | dUt dDt ||}B|dVkr |d kr| | }n_|dkrt |t |}nN|d3kr| | }nC|dGkr |8|9|8|:}n4|dWkr6|d kr$t | | d| }n|dkr4t ||d|}n |dXkr|d kr_| | | }C| | | }D| | | }Et |C|Dd|E}n|dkr|||||}C|||||}D|||||}Et |C|Dd|E}n|dYkr|d kr| | d| }F| | | }DdD|F|D}n|dkr||d|}F|||||}DdD|F|D}ns|dZkr |d kr| | | }C| | | }Dt |Ct |D}nQ|dkr|||||}C|||||}Dt |Ct |D}n,|d3kr|-|.}n!|d[krK|d kr5t | | d}n |dkrIt ||d||d}n|d\kr|d kr| | d}C| | d}D| | | }E|Et |C|D}Gt |C|Ddt |C|D|G}n|dkr|||||}C|||||}D|||||}E|Et |C|D}Gt |C|Ddt |C|D|G}n}|d]kr|d kr| | | }C| | | }D| | | }E|Et |C|D}nV|dkr|||||}C|||||}D|||||}E|Et |C|D}n(|d^krN|dkr>|||}C|||}D|||}E|Et |C|D}|d)krL|&t |'|(}n|d_krq|d kr\| }n|dkrht |}n|d3kro| }n|d`kr|d kr| }n|dkrt |}n|d3kr| }n|dkr |d kr|jddddg}|jddd}|jddd}n|dkr|jddd%d&g}t |jddd%}t |jddd&}nZ|d3kr |jddddg}|jddd}|jddd}n6|dakr|d3kr|5}n(|dbkr'|d3kr%|6}n|dckr5|d3kr3|,}n |ddkrC|d3krA|3}n|dekrQ|d3krO|4}n|dfkrf|d3krd|jdddg}n|dhkr{|d3kry|jdddi}n|djkr|d3kr|1}n|dkkr|d3kr|/}n|dlks|dmkr|dGkr|8|:|7}n|dNkr|A}n|dnkr|dGkr|8|9|7}nx|dNkr|@}no|dokr|dNkr|=}na|dpkr|dNkr|>}nS|dqkr|dNkr|?}nE|dks|dkr"|dGkr |8|9|7}|8|:|7}t j||gdDdr}n|dskr4|dGkr2|8|;|7}n |dtkrG|dGkrF|8|9|8|:}n|duksQ|dvkr]|dGkr\|8|8|:}n|dwksg|dxkrs|dGkrr|9|9|;}n|dykr|dGkr|;|9|;}n|dzkr|dGkr|9|9|8}n|d{kr|dGkrd||9|9|8}n|d}ks|d~kr|dGkr|8|8|9|:}n|dks|dkr|dGkr|8|9|8|:|7}H|8|H|8|9|:|H}n[|dks|dks|dk r |dGk r |8|;|9|:|8|:|9|;}n6|dk r6|dGk r5|8|9|8|:}I|:|;|9|;}J|I|J|7}H|8|;|H|7|H}n | |dt dD|jj}K|dk sT|dk sT|dk rSz|KdDk rt|jd}Ltj|j|L}Mt|jd}Ltj|j|L}Nn|Kdk rt|jd}Lt|jdD}Otj|j|L|O}Mt|jd}Lt|jdD}Otj|j|L|O}NnY|Kdk r t|jd}Lt|jdD}Ot|jd}Ptj|j|L|O|P}Mt|jd}Lt|jdD}Ot|jd}Ptj|j|L|O|P}Ntj|M|Ng}QWnt yR}Rz||R|d|dd}Q|dWYd}R~Rnd}R~Rwwzs|KdDk rot|jd}Ltj|jdD|L}QnV|Kdk rt|jd}Lt|jdD}Otj|jdD|L|O}Qn0|Kdk rt|jd}Lt|jdD}Ot|jd}Ptj|jdD|L|O|P}QWn)t y}Rz||R|d|dd}Q|dWYd}R~Rnd}R~Rww||Q|BfS)ay! Calculate the statistic from the data from the read in MET .stat file(s) Args: model_data - Dataframe containing the model(s) information from the MET .stat files stat - string of the simple statistic name being plotted Returns: stat_values - Dataframe of the statistic values stat_values_array - array of the statistic values stat_plot_name - string of the formal statistic name being plotted ror5r6rrr NTFc3r7r8r?r9r;r?r@r=r>z!calculate_stat..r?rnrprqrrrsrtrrc3r7r8r?r9r;r?r@r=r>r@rvrwrxryrzr{c3r7r8r?r9r;r?r@r=r>rAr|r}r~rrrrrc3r7r8r?r9r;r?r@r=r>rBrrrrrrrrc3r7r8r?r9r;r?r@r=r>rCrrrrrrrrrrrrrrrz+Cannot convert column units for line_type "rDrc3r7r8r?r9r;r?r@r=+r>rErrrrrc3r7r8r?r9r;r?r@r=3r>rFrrrrrrrrGrrrrrr r r r r rrrrrrr)rrr)rrrrrrrrrrrMr!r"r#r$r%r&r'r(r)rr*r+r,r-r.r/r0r1r2rr_z@This is usually OK, and will happen if event_equalization=False.z&Setting stat_values_array to Nonetype.zContinuing ...)rrrorprr#rqr%rrrrr3rrr{rnlevelsrget_level_valuesuniquermasked_invalidreshaper$ ValueError)Srr~rrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmrrrrrrrrrrrrrrZnindexZindex0Zstat_values_array_fbarZstat_values_array_obarZindex1index2Zstat_values_arrayer?r;r@rs                                                                     ( $                                                                                                  rcCs||dtj|dd}d||vr#|d|d}|d7}nd|vr4|d|d}|d7}tj|d|}|S) Nr_dump_row.statrC fcst_leadfcst_lead_avgs.txtz_fcst_lead_avgs.txtrospathbasenamerPjoin)rinput_filenameroutput_base_dirZlead_avg_filenameZ lead_avg_filer?r?r@get_lead_avg_fileis$    rcCs|dtj|dd}d||vr|d|d}nd|vr0|d|d}|d7}|d|d7}tj|d |}|S) NrrrCrrZ_fcst_lead_avgsZ_CI_rrr)rrrrrZ CI_filenameZCI_filer?r?r@ get_ci_files"   rc sfdddD|g}tttjjd}|D]YfddtjD}t|D]\}}|dkrC|}q8|j |ddd }q8| } |D](}| D]!\} } | dd | ddddf vry|| qXqRq"j|} | j| d g j} | |} | jdkrƈjjjjd td d _tfd dtttjdD}n |ddd}|r|d| |fS|d|d|d|fS)Ncsg|] }|vr|qSr?)keys)rkey)dfr?r@rs  z$equalize_samples..) LEAD_HOURSrrFCST_THRESH_SYMBOLFCST_THRESH_VALUEr`rcs.g|]}t|dtkr|qS)r)r get_group)rname) cols_to_check df_groupsunique_indep_varr?r@rs  rinnerF)how indicatorrUrrcs*g|]}tjt|ddjdkqS)rr)r#rxsrrL)rr)df_groups_sizesr?r@rsz;Sample equalization was successful but resulted in an emptyz dataframe.Tz@Data were successfully equalized along the independent variable.z8Data equalization along the independent variable failed.znThis may be a bug in the verif_plotting code. Please contact the verif_plotting code manager about your issue.z9Skipping equalization. Sample sizes will not be plotted.)rr#rr$rgroupsrr[rvmergedrop_duplicatesiterrowsto_numpyrorrrrL set_levelslevelsr'rr%rr)rrgroup_byindexesZunique_indep_varsdfsrZdfs_iZ df_mergedZ match_thesererowZ df_equalizedZdf_equalized_groupsZdata_are_equalizedr?)rrrrrr@equalize_samplessz         rc CsZg}t|dkr||d|St|dkr1||d|d|||d||St|D]\}}|dkr@|} q5|t|dkrt|t||dkrd|||| ||q5t|t||ddkrt| t||dkr||| d||d|||||||q5||||d|||||||q5t| t|dkr||| d||q5|||| d|||q5t|t||ddkr't| t||dkr||| |n||| d||d||} q5||S)NrrrrB-)rrvrrr) Z listed_itemsZ joincharsZprecharsZ postcharsZ prechars_lastZpostchars_lastZ new_itemsrr^startr?r?r@get_name_for_listed_itemss>   $  & r)rsysrr(numpyr#pandasrwarningsfilterwarningsrArSrmrrrrr3rrrrrrr?r?r?r@s@ 8+!O&'mni V