o ����m�g�-����������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlm Z �e�jd�Zej �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�)NzCalled 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���Zstart_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