
    Kiq'                     `    S SK r S SKrS rS rS rS rS rS rS rSS	\	" S
5      4S jr
S rg)    Nc                 ~   [         R                  " U [         R                  S9n [         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n USS2S4   R	                  S5      nUSS2S4   R	                  S5      n[         R                  " SX-
  U-  S-  -  5      U[        R                  " S[        R                  -  5      -  -  $ )	   
Gaussian likelihood for batched θ.

x:     Tensor of shape (N,) or (batch_size, N)
theta: Tensor of shape (batch_size, 2) -> [mu, sigma] for each θ

Returns:
    Tensor of shape (batch_size, N) -> likelihood of each x for each θ
dtype   r   N                @torch	as_tensorfloat32ndim	unsqueezeshapeexpandexpmathsqrtpi)xthetacorrelation
batch_sizemusigmas         M/global/cfs/cdirs/lsst/www/DESC_TD_PUBLIC/users/bastienc/kestrel/Functions.pyDistGaussianr      s     	/AOOE7E zzQ"QJ 	vv{KKNwwqzQ:>HHZ$	q!t		q	!B!Q$K!!!$E99Tafe^a//0EDIIcDGGm<T4TUU    c                    [         R                  " U [         R                  S9n [         R                  " U[         R                  S9n[         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n UR                  S:X  a  UR	                  S5      nUR
                  S   S:X  a  US:  a  UR                  US5      nUSS2S4   R	                  S5      nUSS2S4   R	                  S5      nUSS2S4   R	                  S5      nXFU-  -   n[         R                  " SX-
  U-  S-  -  5      U[        R                  " S[        R                  -  5      -  -  $ )	u   
Gaussian likelihood with μ evolving via m * correlation.

x:           Tensor of shape (N,) or (batch_size, N)
theta:       Tensor of shape (batch_size, 3) -> [mu0, sigma, m]
correlation: Same shape as x

Returns:
    Tensor of shape (batch_size, N)
r   r   r   r   Nr
   r	   r   r   )r   r   r   r   mu0r   mr   s           r   DistGaussian_EVOLr$   &   s    	/AOOE7E//+U]]CK zzQ"QJ 	vv{KKNwwqzQ:>HHZ$ 1!++A.q Z!^!((R8
1+


"C!Q$K!!!$Eada A 
;	B99Taf-!334		#PTPWPW-@X8XYYr    c                    [         R                  " U [         R                  S9n [         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n USS2S4   R	                  S5      nSnSU-  nSU-  nXg-  [         R                  " Xg-
  * U -  5      -  nU$ )u   
Exponential likelihood for batched θ.

x:     Tensor of shape (N,) or (batch_size, N)
theta: 

Returns:
    Tensor of shape (batch_size, N) -> likelihood of each x for each θ
r   r   r   r   N      ?      ?r   r   r   r   r   r   r   r   	r   r   r   r   tautau_proposallambda_targetlambda_proposalweightss	            r   DistExponentialr/   O   s     	/AOOE7E zzQ"QJ 	vv{KKNwwqzQ:>HHZ$
1+


"C L #IML(O .%))m>]<^ab<b2ccGNr    c                     g )Nr(   r)   s	            r   DistExponential_EVOLr1   u   s    
r    c                    [         R                  " U [         R                  S9n [         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n USS2S4   R	                  S5      nUSS2S4   R	                  S5      nUSS2S4   R	                  S5      nUSS2S4   R	                  S5      nUSS2S4   R	                  S5      n[         R                  " S	X-
  U-  S-  -  5      U[        R                  " S
[        R                  -  5      -  -  n	U[         R                  " S	X-
  U-  S-  -  5      -  U[        R                  " S
[        R                  -  5      -  -  n
X-   $ )u   
Gaussian likelihood for batched θ.

x:     Tensor of shape (N,) or (batch_size, N)
theta: Tensor of shape (batch_size, 2) -> [mu1, sigma1, mu2, sigma2, a] for each θ

Returns:
    Tensor of shape (batch_size, N) -> likelihood of each x for each θ
r   r   r   r   Nr
         r	   r   r   )r   r   r   r   mu1sigma1mu2sigma2aG1G2s              r   DistDoubleGaussianr<      s    	/AOOE7E zzQ"QJ 	vv{KKNwwqzQ:>HHZ$
1+


"C1a4[""1%F 1+


"C1a4[""1%Fada A 
4AGV+a//	0FTYYsTWW}=U4U	VB	
599Tagv-112	2ftyytww?W6W	XB5Lr    c                    [         R                  " U [         R                  UR                  S9n [         R                  " U[         R                  S9n[         R                  " U[         R                  UR                  S9nUR                  S:X  a  UR                  S5      nUR                  S   nU R                  S:X  a  U R                  S5      n U R                  S   S:X  a  US:  a  U R                  US5      n UR                  S:X  a  UR                  S5      nUR                  S   S:X  a  US:  a  UR                  US5      nUSS2S4   R                  S5      nUSS2S4   R                  S5      nUSS2S4   R                  S5      nUS[         R                  " XR-  S-
  5      -   -  S-   nX-
  U-  n[         R                  " S	US-  -  5      U[        R                  " S
[        R                  -  5      -  -  n	U	$ )z
Logistic-shaped likelihood for importance sampling.

x:           (N,) or (B, N)
theta:       (B, 3) -> [L, k, sigma]
correlation: (N,) or (B, N)

Returns:
    (B, N) likelihood weights
)r   devicer   r   r   r   Nr
   
   r	   r   )r   r   r   r>   r   r   r   r   r   r   r   r   )
r   r   r   BLkr   meanzpdfs
             r   DistLogisticrF      s    	u||DAOOE7E//+U]]5<<XK zzQ"AAvv{KKNwwqzQ1q5HHQO1!++A.q QU!((B/ !Q$K!!!$A!Q$K!!!$A!Q$K!!!$E EIIao2334q8D 
UA
))D1a4K
 EDIIcDGGm,D$D
ECJr    c                 8   [         R                  " U [         R                  S9n [         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n USS2S4   R	                  S5      nUSS2S4   R	                  S5      nSU-  nXS-
  -  [         R                  " U* U -  5      -  nU$ )u   
Gamma likelihood for batched θ.

x:     Tensor of shape (N,) or (batch_size, N)
theta: 

Returns:
    Tensor of shape (batch_size, N) -> likelihood of each x for each θ
r   r   r   r   Nr'   r(   )r   r   r   r   r*   gammar,   r.   s           r   	DistGammarI      s     	/AOOE7E zzQ"QJ 	vv{KKNwwqzQ:>HHZ$
1+


"C!A#J  #E #IM !)nuyy=)9A)=>>GNr    g333333?infc                 d   [         R                  " U [         R                  S9n [         R                  " U[         R                  S9nUR                  S:X  a  UR	                  S5      nUR
                  S   nU R                  S:X  a  U R	                  S5      n U R
                  S   S:X  a  US:  a  U R                  US5      n USS2S4   R	                  S5      nUSS2S4   R	                  S5      n[         R                  " SX-
  U-  S-  -  5      U[        R                  " S[        R                  -  5      -  -  nS	 n	X6-
  U-  n
XF-
  U-  nU	" U5      U	" U
5      -
  n[         R                  " US
S9nX:  X:*  -  n[         R                  " U5      nX   UR                  U5      U   -  X'   U$ )u   
Truncated Gaussian likelihood for batched θ.

x:     Tensor (N,) or (batch_size, N)
theta: Tensor (batch_size, 2) -> [mu, sigma]

low, high: truncation bounds (can be scalars or tensors)

Returns:
    Tensor (batch_size, N)
r   r   r   r   Nr	   r
   r   c                 h    SS[         R                  " U [        R                  " S5      -  5      -   -  $ )Nr&   r   r
   )r   erfr   r   )rD   s    r   
normal_cdf)DistTruncatedGaussian.<locals>.normal_cdf6  s(    a%))A		!$45566r    g-q=)min)r   r   r   r   r   r   r   r   r   r   r   clamp
zeros_like	expand_as)r   r   r   lowhighr   r   r   rE   rN   r9   bZmasktruncated_pdfs                  r   DistTruncatedGaussianrZ     s    	/AOOE7E zzQ"QJ 	vv{KKNwwqzQ:>HHZ$	q!t		q	!B!Q$K!!!$E ))DQVUNQ..
/5499S477];S3S
TC7 
UA	eA1
1%A 	A5!A H#D$$S)M)akk#&6t&<<Mr    c                     [         R                  " U [         R                  S9n U R                  S:X  a  U R	                  S5      n U R
                  S   ng)r   r   r   r   N)r   r   r   r   r   r   )r   r   s     r   	DistDeltar\   I  sC     OOE7E zzQ"QJ
r    )r   r   r   r$   r/   r1   r<   rF   rI   floatrZ   r\    r    r   <module>r_      sN     V<'ZR$L&R$L*X"J 15#E%L 2hr    