o

����m�g�-����������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlm	Z
�e�jd�Zej
�d�e�j
�e���d�dlmZ�d�dlZdd��Zdd��Zd	d
��Zdd��Zd
d��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd ��Z d!d"��Z!dS�)#�����N)�	timedelta�USH_DIR)�
prune_datac�����������������C���s����d�|v�rd|��d�d�}|���|��t|��|dkrA|\}}|jt|�d�tt|�d��}|jt|�d�tt|�d��}	||	f}
|
S�|dkrI|}
|
S�dt|������d	�d
�}|���|��t|��)NzFATAL ERROR: One or more FCST_z_HOURS is Nonetype. This may bez# because the input string is empty.�INIT)�hour��hours�VALIDz FATAL ERROR: Invalid DATE_TYPE: z. Valid values arez VALID or INIT)�error�
ValueError�replace�min�td�max�str�upper)�logger�	date_type�
date_range�
date_hours�fleads�e�init_beg�init_end�	valid_beg�	valid_end�valid_range��r����A/lfs/h1/ops/prod/packages/evs.v1.0.19/ush/cam/df_preprocessing.py�get_valid_range���s4���
�
�������
r���c�����������������C���sx��dd��|D��}dt�t���j��}tj�|t�|����d�t�|	�����d�t�|��d�t�|�����|�}tj�|�r�t	t�
|��r�|��d|��d�d|������t|||||t�|����t�|��
��t�|��
��t�|����t�|�dd��|
D��t�|	����|d	d��|
D����|S�d
|��d�}d|��d
�}|��|��|��|��t|d�|���d
|��d�}d|��d
�}|��|��|��|��t|d�|���)Nc�����������������S�������g�|�]}t�|��qS�r����r�����.0�modelr���r���r����
<listcomp>9��������z"run_prune_data.<locals>.<listcomp>�tmp�_zLooking for stat files in z
 using thez template: c�����������������S�������g�|�]
}d�t�|��d���qS��� r!���)r#���Z
fcst_var_namer���r���r���r%���M��������c�����������������S���r)���r*���r!���)r#���Z
interp_pntr���r���r���r%���O���r,���z
FATAL ERROR: z exists but is empty.z	Populate z and retry.�
z does not exist.zCreate and populate )r����uuid�uuid4�hex�os�path�joinr����isdir�len�listdir�infor����lowerr
����OSError)r����	stats_dir�	prune_dir�output_base_template�
verif_case�
verif_type�	line_typer����eval_period�var_name�fcst_var_names�
model_list�domain�interp_pnts�tmp_dir�pruned_data_dir�e1�e2r���r���r����run_prune_data6���sL�����
��	�
��



rJ���c�����������������C���s8���|�j�r|�d|��d���|�dd���|�d��dS�dS�)NzCalled from �:z4Empty Dataframe encountered while filtering a subsetz of input statistics...z(========================================TF)�empty�warningr7���)�dfr���Zcalled_fromr���r���r����check_empty_���s����
rO���c��������������������sr��dd��|D��}|d���d�}|d���d�}|D��]:��tj�|t�����d��}tj�|�s`t��fdd�d	D���s_|��t�����d
�d|��d����|��d
|��d�dt�����d��d���|��d��q|sj|��d|�����z�t	�
|�}t	�|�|t|����||�}t
�||f�}tj|dd�d|td�}dt|��}||d���D�]}||��t�||<�q�t||�||	|
|||
||�
}z	t�||g�}W�n�ty����|}Y�n�ty��}�z|}W�Y�d�}~nd�}~ww�|��t	�����ttt�d����d����dd����\}}}|��d|�����W�q�tjj�y+�}�z|��|��|��d��|��|����|��d��W�Y�d�}~qd�}~w�t �yR�}�z|��|��|��d��|��|����|��d��W�Y�d�}~qd�}~ww�|�r�zt!�"|��W�n(�t �y��}�z|��|��|��d��|��|����|��d��W�Y�d�}~nd�}~ww�zt#||�d��r�W�d�S�|j$ddd��|W�S��t�y��}�z|��|��|��d��W�Y�d�}~d�S�d�}~ww�)Nc�����������������S���r ���r���r!���r"���r���r���r���r%���m���r&���zcreate_df.<locals>.<listcomp>r���z%HZ %d %B %Y����z.statc�����������������3���s�����|�]	}|t����v�V��qd�S��Nr!���)r#����
group_name�r$���r���r����	<genexpr>t���s�����
�zcreate_df.<locals>.<genexpr>)�group�setz is not a model inr+����.z8It may be a group name, or else check if the stats_dir (z
) includesz, data according to the output_base template,z given domain, variable, etc...zContinuing ...z*Creating dataframe using pruned data from T)�delim_whitespace�header�skiprows�names�dtype�����z
free -t -mzRAM memory available: zThe file in question:zThe directory in question:�	create_df��drop�inplacezXNonexistent dataframe. Stats directory may be empty. Check the logfile for more details.)%�strftimer1���r2���r3���r����isfile�anyrM����debug�	plot_util�get_stat_file_base_columns�get_stat_file_line_type_columnsr����np�concatenate�pd�read_csvr5����astype�float�run_filters�concat�	NameError�UnboundLocalError�get_memory_usage�map�int�popen�	readlines�split�errors�EmptyDataErrorr9����shutil�rmtreerO����reset_index)r���r:���rG���r?���r���rC����met_version�clear_prune_dirr>���rB����
obs_var_names�interprD���r���r���Zstart_stringZ
end_string�fpathZdf_colnamesZdf_line_type_colnamesZdf_tmp�i�col_namerN���r����total_memoryr(���r���rS���r���r^���i���s����
�
��
���

���

���
�

�

��

��
���r^���c�����������������C���s����|�d�u�r|�S�t�|����dv�r+|�|�d�j��d�|�d�j��d�@��}�|�|�d��d���}�nt�|����dv�rF|�|�d�j��d�|�d�j��d�B���}�t|�|d��|�S�)	N)�pres�	upper_air�FCST_LEV�P�OBS_LEV�OBTYPEZONLYSF)�sfc�	conus_sfc�	polar_sfc�filter_by_level_type)r���r8����
startswith�eqrO���)rN���r���r>���r���r���r���r��������s"�������r����c�����������������C���s<���|�d�u�r|�S�|�|�d���|�|�d���|�@��}�t|�|d��|�S�)N�FCST_VAR�OBS_VAR�filter_by_var_name)�isinrO���)rN���r���rB���r����r���r���r���r��������s�����r����c�����������������C���s6���|�d�u�r|�S�|�|�d���t|������}�t|�|d��|�S�)N�INTERP_MTHD�filter_by_interp)r����r���r���rO���)rN���r���r����r���r���r���r��������s
���r����c�����������������C���s2���|�d�u�r|�S�|�|�d���t|���}�t|�|d��|�S�)N�VX_MASK�filter_by_domain)r����r���rO���)rN���r���rD���r���r���r���r��������s
���r����c�����������������C���s,���t��dd��|�d�D���|�d<�t|�|d��|�S�)Nc�����������������S���s���g�|�]
}t�|d�d����qS�)N�����)ru���)r#����leadr���r���r���r%�������r,���z%create_lead_hours.<locals>.<listcomp>�	FCST_LEAD�
LEAD_HOURS�create_lead_hours)ri����arrayrO����rN���r���r���r���r���r��������s���r����c�����������������C���s&���t�j|�d�dd�|�d<�t|�|d��|�S�)N�FCST_VALID_ENDz
%Y%m%d_%H%M%S)�formatr	����create_valid_datetime)rk����to_datetimerO���r����r���r���r���r��������s���r����c��������������������s<�����j�ddd����fdd�t��d��D����d<�t��|d����S�)NTr_���c��������������������s,���g�|�]\}}��d��|�t�jt|�d���qS�)r	���r���)rk����
DateOffsetru���)r#����vr����rN���r���r���r%�������s������z(create_init_datetime.<locals>.<listcomp>r����r����create_init_datetime)r}����	enumeraterO���r����r���r����r���r��������s���


�r����c�����������������C���sR���|�d�u�r|�S�|�j�|�t|�����|d�k|�t|�����|d�k@��}�t|�|d��|�S�)Nr���rP����filter_by_date_range)�locr���r���rO���)rN���r���r���r���r���r���r���r��������s�����r����c��������������������sT���|�d�u�r|�S�t�|�|d�r|�S�|�j��fdd�|�t|�����jjD���}�t�|�|d��|�S�)N�filter_by_hourc��������������������s���g�|�]}|��v��qS�r���r���)r#����x�r���r���r���r%���
��r&���z"filter_by_hour.<locals>.<listcomp>)rO���r����r���r����dtr���)rN���r���r���r���r���r����r���r������s���(r����c�����������������C���sr���t�|�|||
|�}t|�||||||||	||
|||�}t|�|||||||||
|||||
�}|d�ur7t||�d�r7d�}|S�)N�get_preprocessed_data)r���rJ���r^���rO���)r���r:���r;���r<���r=���r>���r?���r���r���r@���r���r���rA���rB���r����rC���rD���r����rE���r~���r���r���rG���rN���r���r���r���r������s ���
��
�r����c
�����������
������C���sp���t�|�||�}�t|�|||�}�t|�||�}�t|�||�}�t|�|�}�t|�|�}�t|�|�}�t|�|||�}�t|�|||	�}�|�S�rQ���)	r����r����r����r����r����r����r����r����r����)
rN���r���r>���rB���r����r����rD���r���r���r���r���r���r���ro���'��s���


ro���)"r1����sysr{���r.����numpyri����pandasrk����datetimer���r����environ�SETTINGS_DIRr2����insert�abspath�prune_stat_filesr���rf���r���rJ���rO���r^���r����r����r����r����r����r����r����r����r����r����ro���r���r���r���r����<module>���s4���
)
X