§
    )ª"jÏ  ã                   ó�   — d dl Zd dlZd dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlmZ d„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zdd„Zdd„Zdd„ZdS )é    N)ÚProcessÚQueue)Úadd_distancec                 ól   ‡— t          || ¦  «        Št          j        ˆfd„| D ¦   «         d¬¦  «        }|S )Nc                 ó    •— g | ]
}‰|         ‘ŒS © r   )Ú.0ÚpÚoutput_distributions     €úX/global/cfs/cdirs/lsst/www/DESC_TD_PUBLIC/users/Brodie/SBI/kestrel/dustbi_calibration.pyú
<listcomp>z#preprocess_data.<locals>.<listcomp>   s   ø€ ÐDÐDÐD AÐ	˜QÔ	ÐDÐDÐDó    éÿÿÿÿ)Údim)Úpreprocess_input_distributionÚtorchÚstack)Úparameters_to_condition_onÚdfdataÚxr   s      @r   Úpreprocess_datar   	   sL   ø€ å7¸Ð@ZÑ[Ô[ÐåŒØDÐDÐDÐDÐ)CÐDÑDÔDØð	ñ 	ô 	€Að
 €Hr   c                 ó    ‡ — ˆ fd„|D ¦   «         S )Nc                 ó‚   •— i | ];}|t          j        ‰|                              ¦   «         t           j        ¬ ¦  «        “Œ<S ))Údtype)r   ÚtensorÚto_numpyÚfloat32)r	   ÚcolÚdfs     €r   ú
<dictcomp>z1preprocess_input_distribution.<locals>.<dictcomp>   sL   ø€ ð ð ð àð 	�UŒ\˜"˜Sœ'×*Ò*Ñ,Ô,µE´MÐBÑBÔBðð ð r   r   )r   Úcolss   ` r   r   r      s.   ø€ ðð ð ð àðñ ô ð r   c                 óø   ‡— dd l }dd lŠ G ˆfd„d|j        ¦  «        }t          | d¦  «        5 } ||¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                     |¬¦  «         |S )Nr   c                   ó"   •‡ — e Zd Zˆ ˆfd„Zˆ xZS )ú%load_posterior.<locals>.CPU_Unpicklerc                 ój   •— |dk    r|dk    rˆfd„S t          ¦   «                              ||¦  «        S )Nztorch.storageÚ_load_from_bytesc                 óV   •— t          j        ‰                     | ¦  «        d¬¦  «        S )NÚcpu)Úmap_location)r   ÚloadÚBytesIO)ÚbÚios    €r   ú<lambda>zBload_posterior.<locals>.CPU_Unpickler.find_class.<locals>.<lambda>"   s    ø€ ¥¤¨B¯JªJ°q©M¬MÈÐ!NÑ!NÔ!N€ r   )ÚsuperÚ
find_class)ÚselfÚmoduleÚnameÚ	__class__r-   s      €€r   r0   z0load_posterior.<locals>.CPU_Unpickler.find_class    sB   ø€ Ø˜Ò(Ð(¨TÐ5GÒ-GÐ-GØNÐNÐNÐNÐNå‘w”w×)Ò)¨&°$Ñ7Ô7Ð7r   )Ú__name__Ú
__module__Ú__qualname__r0   Ú__classcell__)r4   r-   s   @€r   ÚCPU_Unpicklerr$      s>   øø€ € € € € ð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8r   r9   Úrb)Údevice)Úpickler-   Ú	UnpicklerÚopenr*   Úto)Úposterior_savenamer;   r<   r9   ÚfÚ	posteriorr-   s         @r   Úload_posteriorrC      sè   ø€ Ø€M€M€MØ€I€I€Ið8ð 8ð 8ð 8ð 8ð 8ð 8˜Ô(ñ 8ô 8ð 8õ 
Ð  $Ñ	'Ô	'ð ,¨1Ø!�M !Ñ$Ô$×)Ò)Ñ+Ô+ˆ	ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ‡L‚L˜€LÑÔÐØÐs   ¯AÁAÁ Ac                 óø  — g }g }t          | d¦  «        5 }|D ]Ç}|                     d¦  «        }|d         }|                     d¦  «        d         }|                     d¦  «        d         }d|› d�}|                     |¦  «         |d	                              d
¦  «        d	         }|                     d¦  «        d         }d|› d�}|                     |¦  «         ŒÈ	 d d d ¦  «         n# 1 swxY w Y   ||fS )NÚrÚOpenedr   zSNIaMODEL00-r   Ú_z4CALIB_DATA/output/PIP_BP-DUST-SAMPLES_DATADESSIM_IA-z/FITOPT000.FITRES.gzé   z	/GENPDFS/z.DATzCALIB_GENPDF/)r>   ÚsplitÚappend)ÚfilenameÚGENPDF_LISTÚSIM_LISTÚfhÚlineÚ	line_listÚSIMÚGENPDFs           r   Úload_assignmentsrS   0   sO  € à€KØ€Hå	ˆh˜Ñ	Ô	ð ' Øð 	'ð 	'ˆDØŸ
š
 8Ñ,Ô,ˆIð ˜A”,ˆCØ—)’)˜NÑ+Ô+¨BÔ/ˆC¸¿	º	À#¹¼ÀqÔ8I°#àbÈÐbÐbÐbˆCØ�OŠO˜CÑ Ô Ð à˜q”\×'Ò'¨Ñ4Ô4°QÔ7ˆFØ—\’\ &Ñ)Ô)¨!Ô,ˆFØ1 VÐ1Ð1Ð1ˆFØ×Ò˜vÑ&Ô&Ð&Ð&ð	'ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð$ ˜Ð Ð s   •CC-Ã-C1Ã4C1c                 ó  — t          | d¦  «        5 }|D ]^}|                     d¦  «        rG|                     d¦  «        dd …         }d„ |D ¦   «         }|d         |d         c|d<   |d<   |ddgz  }Œ_	 d d d ¦  «         n# 1 swxY w Y   |S )	NrE   z#INP:ú rH   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úfloat©r	   Úis     r   r   zload_truth.<locals>.<listcomp>P   s   € Ð=Ð=Ð=¨A�u Q™xœxÐ=Ð=Ð=r   é   é   r   )r>   Ú
startswithrI   )Úgenpdf_filerN   rO   Útrue_paramss       r   Ú
load_truthr_   K   sê   € Ý	ˆk˜3Ñ	Ô	ð % 2Øð 	%ð 	%ˆDØ�Š˜wÑ'Ô'ð %Ø"Ÿjšj¨™oœo¨a¨b¨bÔ1�Ø=Ð=°Ð=Ñ=Ô=�Ø1<¸Q´ÀÈQÄÐ.�˜A‘ ¨A¡Ø  !˜uÑ$�øð	%ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð Ðs   ‘A"B Â BÂBc                 óx  — ddl m} dd l}dd l}|                     | dd¬¦  «        } |dddd	¬
¦  «        }|                     |j        j        ¦  «        j        |d<   |j	        |j
        dk             }|                     |¬¦  «        }t          ||d d	…         g d¢z   ¦  «        }t          |¦  «        }	|	|d<   |S )Nr   )ÚwCDMú#z\s+)ÚcommentÚsepg
×£p=êP@g×£p=
×Ó?g®Gázæ?r   )ÚH0ÚOm0ÚOde0Úw0ÚMU)Ún)Úx0Úx0ERRri   ÚMURES)Úastropy.cosmologyra   ÚnumpyÚpandasÚread_csvÚdistmodÚzHDÚvaluesÚvalueÚlocÚHOST_LOGMASSÚsampler   r   )
ÚdatfilenameÚdesired_evtr   ra   ÚnpÚpdr   Úcosmor   Ú
MURES_simss
             r   Úload_just_datar   W   s   € à&Ð&Ð&Ð&Ð&Ð&ØÐÐÐØÐÐÐà�[Š[˜Ø%(¨fð ñ 6ô 6€Fð ˆDØØØØð	ñ ô €Eð —=’= ¤Ô!2Ñ3Ô3Ô9€Fˆ4�LàŒZ˜Ô+¨aÒ/Ô0€Fà�]Š]˜[ˆ]Ñ)Ô)€Få7Ø
Ð& s¨ sÔ+Ð,AÐ,AÐ,AÑAñCô CÐõ Ð1Ñ2Ô2€Jà €Fˆ7�Oà€Mr   c                 óâ   — 	 |                       |¦  «        } |                      |f¦  «        }|                     |¦  «         dS # t          $ r }|                     |¦  «         Y d}~dS d}~ww xY w)z%Worker for subprocess-based sampling.N)Úset_default_xrx   ÚputÚ	Exception)rB   r   ÚNsamplesÚ	out_queueÚsamplesÚes         r   Úsample_workerrˆ   v   sŠ   € ðØ×+Ò+¨AÑ.Ô.ˆ	Ø×"Ò" H ;Ñ/Ô/ˆØ�Š�gÑÔÐÐÐøÝð ð ð Ø�Š�aÑÔÐÐÐÐÐÐÐøøøøðøøøs   ‚A A Á
A.ÁA)Á)A.é<   c                 ó¦  — t          ¦   «         }t          t          | |||f¬¦  «        }|                     ¦   «          |                     |¦  «         |                     ¦   «         r*|                     ¦   «          |                     ¦   «          dS |                     ¦   «         s-|                     ¦   «         }t          |t          ¦  «        rdS |S dS )z/Sample posterior with timeout using subprocess.)ÚtargetÚargsN)r   r   rˆ   ÚstartÚjoinÚis_aliveÚ	terminateÚemptyÚgetÚ
isinstancerƒ   )rB   r   r„   Útimeoutr…   r
   Úresults          r   Úsample_with_timeoutr–   €   s±   € å‘”€IÝ•}¨I°q¸(ÀIÐ+NÐOÑOÔO€AØ‡G‚G�I„I€IØ‡F‚Fˆ7�O„O€Oà‡z‚z�|„|ð Ø	�Š‰ŒˆØ	�Š‰ŒˆØˆtà�?Š?ÑÔð Ø—’‘”ˆÝ�f�iÑ(Ô(ð 	Ø�4ØˆØˆ4r   éˆ  c                 ó  — t          | ¦  «        }d}t          j        ||ft          j        ¦  «        }t	          j        dd¬¦  «         t          |¦  «        D �]«}	| |	         }
t          ||	         ¦  «        }t          |
d|¦  «        }t          ||¦  «        }	 t          ||||¦  «        }|€t          d|	› d�¦  «         Œjn## t          $ r t          d|	› d�¦  «         Y ŒŠw xY w|                     ¦   «                              ¦   «                              ¦   «         }t          j        |¦  «        }t#          |j        d	         t          |¦  «        ¦  «        }t          j        |d d …d |…f         ¦  «         }|d d …d |…f         |d |…         k                          d
¬¦  «                             t,          ¦  «        }|                     d
¬¦  «         }t          j        ||<   |||	d |…f<   t          d|	› d�¦  «         �Œ­|S )Né   Úerrorz,Only 0\.000% proposal samples are accepted.*)Úmessagei™  z
Iteration u-   : timeout or sampling failed â†’ leaving NaNsu%   : 0% proposal acceptance â†’ skippingrH   r   )Úaxisz: done)Úlenr{   ÚfullÚnanÚwarningsÚfilterwarningsÚranger_   r   r   r–   ÚprintÚWarningÚdetachr(   ro   ÚarrayÚminÚshapeÚisnanÚsumÚastyperW   Úany)ÚSIMSÚGENPDFSrB   r„   r”   r   Únum_simsÚ
num_paramsÚranksrY   ÚsimfileÚtruthsr   r   r†   Ú
samples_npÚ	truths_nprj   Ú
valid_maskÚrank_valuesÚall_nan_colss                        r   Úrun_sbcr¹   —   s-  € Ý�4‰yŒy€HØ€JÝŒG�X˜zÐ*­B¬FÑ3Ô3€Eõ ÔØØ?ðñ ô ð õ
 �8‰_Œ_ð !&ñ !&ˆØ�q”'ˆÝ˜G AœJÑ'Ô'ˆå ¨Ð/IÑJÔJˆÝÐ6¸Ñ?Ô?ˆð	Ý)¨)°Q¸À'ÑJÔJˆGØˆÝÐS 1ÐSÐSÐSÑTÔTÐTØð øõ ð 	ð 	ð 	ÝÐG˜qÐGÐGÐGÑHÔHÐHØˆHð	øøøð
 —^’^Ñ%Ô%×)Ò)Ñ+Ô+×1Ò1Ñ3Ô3ˆ
Ý”H˜VÑ$Ô$ˆ	Ý�
Ô  Ô#¥S¨¡^¤^Ñ4Ô4ˆå”h˜z¨!¨!¨!¨R¨a¨R¨%Ô0Ñ1Ô1Ð1ˆ
ð " ! ! ! R a R %Ô(¨9°R°a°R¬=Ò8×=Ò=À1Ð=ÑEÔE×LÒLÍUÑSÔSˆð #Ÿš¨A˜Ñ.Ô.Ð.ˆÝ$&¤Fˆ�LÑ!à"ˆˆa��!�ˆe‰åÐ$˜1Ð$Ð$Ð$Ñ%Ô%Ð%Ñ%à€Ls   Â'CÃC#Ã"C#é   c                 óÌ  — | j         \  }}|€d„ t          |¦  «        D ¦   «         }d}t          t          j        ||z  ¦  «        ¦  «        }t          j        ||d|z  d|z  f¬¦  «        \  }}|                     ¦   «         }t          |¦  «        D ]Ý}	||	         }
| dd…|	f         }|t          j        |¦  «                  }t          |¦  «        dk    r|
 
                    ||	         › d�¦  «         Œc|
                     ||dd	d
¬¦  «         |
                     d|z  dd¬¦  «         |
 
                    ||	         ¦  «         |
                     d¦  «         |
                     d¦  «         ŒÞt          |t          |¦  «        ¦  «        D ]}|                     ||         ¦  «         Œt          j        ¦   «          t          j        d¦  «         t          j        ¦   «          dS )a	  
    Plot SBC rank histograms for each parameter.

    Parameters
    ----------
    ranks : np.ndarray
        Shape (num_sims, num_params)
    num_bins : int
        Number of histogram bins
    param_names : list of str, optional
        Names of parameters
    Nc                 ó   — g | ]}d |› �‘ŒS )Úparam_r   rX   s     r   r   z"plot_sbc_ranks.<locals>.<listcomp>Ø   s   € Ð?Ð?Ð?¨�| �|�|Ð?Ð?Ð?r   é   é   )Úfigsizer   z
 (no data)Tgffffffæ?Ú	steelblue)ÚbinsÚdensityÚalphaÚcolorg      ð?Úredz--)rÅ   Ú	linestyleÚRankÚDensityzbla.pdf)r¨   r¢   Úintr{   ÚceilÚpltÚsubplotsÚflattenr©   r�   Ú	set_titleÚhistÚaxhlineÚ
set_xlabelÚ
set_ylabelÚdelaxesÚtight_layoutÚsavefigÚshow)r±   Únum_binsÚparam_namesr¯   r°   r!   ÚrowsÚfigÚaxesÚjÚaxÚparam_ranksÚks                r   Úplot_sbc_ranksrá   Ç   sæ  € ð !œ;Ñ€Hˆjð ÐØ?Ð?­U°:Ñ->Ô->Ð?Ñ?Ô?ˆà€DÝ�rŒw�z DÑ(Ñ)Ô)Ñ*Ô*€Då”˜T 4°!°D±&¸!¸D¹&Ð1AÐBÑBÔB�I€CˆØ�<Š<‰>Œ>€Då�:ÑÔð !ð !ˆØ�!ŒWˆð ˜A˜A˜A˜q˜D”kˆØ!¥2¤8¨KÑ#8Ô#8Ð"8Ô9ˆåˆ{ÑÔ˜qÒ Ð Ø�LŠL˜K¨œNÐ6Ð6Ð6Ñ7Ô7Ð7Øà
�Š� (°DÀÈ;ˆÑWÔWÐWð 	�
Š
�3˜‘>¨¸$ˆ
Ñ?Ô?Ð?à
�Š�[ ”^Ñ$Ô$Ð$Ø
�Š�fÑÔÐØ
�Š�iÑ Ô Ð Ð õ �:�s 4™yœyÑ)Ô)ð ð ˆØ�Š�D˜”GÑÔÐÐåÔÑÔÐÝ„K�	ÑÔÐÝ„H�J„J€J€J€Jr   )r‰   )r—   r‰   N)rº   N)ro   r{   r   Úmatplotlib.pyplotÚpyplotrÌ   Úmultiprocessingr   r   r    ÚsysÚdustbi_simulatorr   r   r   rC   rS   r_   r   rˆ   r–   r¹   rá   r   r   r   ú<module>rç      s  ðØ Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø €€€Ø 
€
€
€
Ø )Ð )Ð )Ð )Ð )Ð )ð	ð 	ð 	ðð ð ðð ð ð,!ð !ð !ð6
ð 
ð 
ðð ð ð>ð ð ðð ð ð ð..ð .ð .ð .ð`3ð 3ð 3ð 3ð 3ð 3r   