§
    ŠŠtjk  ã                   óÜ   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 dgZd„ Zg d¢Zg d	¢Zg d
¢Zg d¢ZeegZeegZdd„Zej        j        d„ ¦   «         Z G d„ de¦  «        ZdS )é    N)ÚTensor)Úconstraints)ÚDistribution)Úbroadcast_allÚlazy_propertyÚVonMisesc                 óˆ   — t          |¦  «        }|                     ¦   «         }|r|                     ¦   «         | |z  z   }|°|S ©N)ÚlistÚpop)ÚyÚcoefÚresults      ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributions/von_mises.pyÚ
_eval_polyr      sG   € Ý�‰:Œ:€DØ�XŠX‰ZŒZ€FØ
ð )Ø—’‘”˜a &™jÑ(ˆð ð )à€Mó    )g      ð?g§Œ$æþ@g¤0”¸3¸@g,–Ç?ØNó?gª2çt´Ñ?gýåIˆ¨x¢?gtHÅZ×Ãr?)	ç Þe3EˆÙ?g�-ÿ¥5‹?gÛÕ’+Hub?gJ‰NÁÐY¿gTÑPŠóÃ‚?gÇý'•¿gãZåðæüš?gULÊ+ß�¿gˆ;ý^p?)ç      à?g§ì‘Yÿì?g(„«�Ézà?gê*öúOÃ?gZƒµ9›?gœå.™•³h?gÓ°­Ù©=5?)	r   g¾þÍ.k¤¿g?Œ”V¨m¿g–tZØOÖZ?gÜ<¯Q …¿gÙ'8©`—?gP“þâ¥�¿gqœ©J:N’?g;PÈJ£4q¿c                 ó¼  — |dk    r|dk    rt          d|› �¦  «        ‚| dz  }||z  }t          |t          |         ¦  «        }|dk    r|                      ¦   «         |z  }|                     ¦   «         }d| z  }| d|                      ¦   «         z  z
  t          |t
          |         ¦  «                             ¦   «         z   }t          j        | dk     ||¦  «        }|S )zX
    Returns ``log(I_order(x))`` for ``x > 0``,
    where `order` is either 0 or 1.
    r   é   zorder must be 0 or 1, got g      @r   )ÚAssertionErrorr   Ú_COEF_SMALLÚabsÚlogÚ_COEF_LARGEÚtorchÚwhere)ÚxÚorderr   ÚsmallÚlarger   s         r   Ú_log_modified_bessel_fnr"   D   sØ   € ð
 �‚z€z�e˜q’j�jÝÐA¸%ÐAÐAÑBÔBÐBð 	
ˆD‰€AØ	ˆA‰€AÝ�q�+ eÔ,Ñ-Ô-€EØ�‚z€zØ—’‘”˜%‘ˆØ�IŠI‰KŒK€Eð 	ˆq‰€AØ��a—e’e‘g”g‘Ñ¥
¨1­k¸%Ô.@Ñ AÔ A× EÒ EÑ GÔ GÑG€EåŒ[˜˜Tš 5¨%Ñ0Ô0€FØ€Mr   c                 ó  — t          j        |j        t           j        | j        ¬¦  «        }|                     ¦   «         �st          j        d|j        z   | j        | j        ¬¦  «        }|                     ¦   «         \  }}}t          j	        t          j        |z  ¦  «        }	d||	z  z   ||	z   z  }
|||
z
  z  }|d|z
  z  |z
  dk    ||z                       ¦   «         dz   |z
  dk    z  }|                     ¦   «         rEt          j        ||dz
                       ¦   «         |
                     ¦   «         z  |¦  «        }||z  }|                     ¦   «         �¯|t          j        z   | z   dt          j        z  z  t          j        z
  S )N©ÚdtypeÚdevice)é   r   é   r   r   )r   ÚzerosÚshapeÚboolr&   ÚallÚrandr%   ÚunbindÚcosÚmathÚpir   Úanyr   ÚsignÚacos)ÚlocÚconcentrationÚ
proposal_rr   ÚdoneÚuÚu1Úu2Úu3ÚzÚfÚcÚaccepts                r   Ú_rejection_samplerA   \   sP  € åŒ;�q”w¥e¤j¸¼ÐDÑDÔD€Dà�hŠh‰jŒjñ 
!ÝŒJ�t˜aœg‘~¨S¬Y¸s¼zÐJÑJÔJˆØ—X’X‘Z”Z‰
ˆˆB�ÝŒI•d”g ‘lÑ#Ô#ˆØ�˜a‘Ñ J°¡NÑ3ˆØ˜Z¨!™^Ñ,ˆØ˜˜A™‘; Ñ# qÒ(¨a°"©f¯\ª\©^¬^¸aÑ-?À!Ñ-CÀqÒ-HÑIˆØ�:Š:‰<Œ<ð 	!å”˜F R¨#¡X§O¢OÑ$5Ô$5¸¿º¹¼Ñ$@À!ÑDÔDˆAØ˜&‘=ˆDð �hŠh‰jŒjñ 
!ð •”‰K˜#Ñ !¥d¤g¡+Ñ.µ´Ñ8Ð8r   c            	       óv  ‡ — e Zd ZdZej        ej        dœZej        ZdZ		 dde
de
dedz  ddfˆ fd	„Zd
„ Zede
fd„¦   «         Zede
fd„¦   «         Zede
fd„¦   «         Z ej        ¦   «          ej        ¦   «         fd„¦   «         Zdˆ fd„	Zede
fd„¦   «         Zede
fd„¦   «         Zede
fd„¦   «         Zˆ xZS )r   aX  
    A circular von Mises distribution.

    This implementation uses polar coordinates. The ``loc`` and ``value`` args
    can be any real number (to facilitate unconstrained optimization), but are
    interpreted as angles modulo 2 pi.

    Example::
        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> m = VonMises(torch.tensor([1.0]), torch.tensor([1.0]))
        >>> m.sample()  # von Mises distributed with loc=1 and concentration=1
        tensor([1.9777])

    :param torch.Tensor loc: an angle in radians.
    :param torch.Tensor concentration: concentration parameter
    )r5   r6   FNr5   r6   Úvalidate_argsÚreturnc                 óÆ   •— t          ||¦  «        \  | _        | _        | j        j        }t	          j        ¦   «         }t          ¦   «                              |||¦  «         d S r
   )r   r5   r6   r*   r   ÚSizeÚsuperÚ__init__)Úselfr5   r6   rC   Úbatch_shapeÚevent_shapeÚ	__class__s         €r   rH   zVonMises.__init__…   sT   ø€ õ (5°S¸-Ñ'HÔ'HÑ$ˆŒ�$Ô$Ø”h”nˆÝ”j‘l”lˆÝ‰Œ×Ò˜ k°=ÑAÔAÐAÐAÐAr   c                 óü   — | j         r|                      |¦  «         | j        t          j        || j        z
  ¦  «        z  }|t          j        dt          j        z  ¦  «        z
  t          | j        d¬¦  «        z
  }|S )Nr(   r   ©r   )
Ú_validate_argsÚ_validate_sampler6   r   r/   r5   r0   r   r1   r"   )rI   ÚvalueÚlog_probs      r   rR   zVonMises.log_prob�   s   € ØÔð 	)Ø×!Ò! %Ñ(Ô(Ð(ØÔ%­¬	°%¸$¼(Ñ2BÑ(CÔ(CÑCˆàÝŒh�q�4œ7‘{Ñ#Ô#ñ$å% dÔ&8ÀÐBÑBÔBñCð 	ð
 ˆr   c                 óJ   — | j                              t          j        ¦  «        S r
   )r5   Útor   Údouble©rI   s    r   Ú_loczVonMises._loc›   s   € àŒx�{Š{�5œ<Ñ(Ô(Ð(r   c                 óJ   — | j                              t          j        ¦  «        S r
   )r6   rT   r   rU   rV   s    r   Ú_concentrationzVonMises._concentrationŸ   s   € àÔ!×$Ò$¥U¤\Ñ2Ô2Ð2r   c                 óð   — | j         }ddd|dz  z  z                        ¦   «         z   }|d|z                       ¦   «         z
  d|z  z  }d|dz  z   d|z  z  }d|z  |z   }t          j        |dk     ||¦  «        S )Nr   é   r(   gñhãˆµøä>)rY   Úsqrtr   r   )rI   ÚkappaÚtauÚrhoÚ_proposal_rÚ_proposal_r_taylors         r   r`   zVonMises._proposal_r£   sŒ   € àÔ#ˆØ�1�q˜5 !™8‘|Ñ#×)Ò)Ñ+Ô+Ñ+ˆØ�a˜#‘g—^’^Ñ%Ô%Ñ%¨!¨e©)Ñ4ˆØ˜3 ™6‘z a¨#¡gÑ.ˆà ™Y¨Ñ.ÐÝŒ{˜5 4š<Ð);¸[ÑIÔIÐIr   c                 óþ   — |                       |¦  «        }t          j        || j        j        | j        j        ¬¦  «        }t          | j        | j        | j	        |¦  «         
                    | j        j        ¦  «        S )a×  
        The sampling algorithm for the von Mises distribution is based on the
        following paper: D.J. Best and N.I. Fisher, "Efficient simulation of the
        von Mises distribution." Applied Statistics (1979): 152-157.

        Sampling is always done in double precision internally to avoid a hang
        in _rejection_sample() for small values of the concentration, which
        starts to happen for single precision around 1e-4 (see issue #88443).
        r$   )Ú_extended_shaper   ÚemptyrW   r%   r5   r&   rA   rY   r`   rT   )rI   Úsample_shaper*   r   s       r   ÚsamplezVonMises.sample­   si   € ð ×$Ò$ \Ñ2Ô2ˆÝŒK˜ T¤Y¤_¸T¼X¼_ÐMÑMÔMˆÝ ØŒI�tÔ*¨DÔ,<¸añ
ô 
ç
Š"ˆTŒXŒ^Ñ
Ô
ð	r   c                 ó:  •— 	 t          ¦   «                              |¦  «        S # t          $ rl | j                             d¦  «        }| j                             |¦  «        }| j                             |¦  «        } t          | ¦  «        |||¬¦  «        cY S w xY w)NrO   )rC   )rG   ÚexpandÚNotImplementedErrorÚ__dict__Úgetr5   r6   Útype)rI   rJ   Ú	_instancerC   r5   r6   rL   s         €r   rh   zVonMises.expand¾   s    ø€ ð	OÝ‘7”7—>’> +Ñ.Ô.Ð.øÝ"ð 	Oð 	Oð 	OØ œM×-Ò-Ð.>Ñ?Ô?ˆMØ”(—/’/ +Ñ.Ô.ˆCØ Ô.×5Ò5°kÑBÔBˆMØ•4˜‘:”:˜c =ÀÐNÑNÔNÐNÐNÐNð		Oøøøs   ƒ $ ¤A3BÂBc                 ó   — | j         S )z8
        The provided mean is the circular one.
        ©r5   rV   s    r   ÚmeanzVonMises.meanÇ   s   € ð
 Œxˆr   c                 ó   — | j         S r
   ro   rV   s    r   ÚmodezVonMises.modeÎ   s	   € àŒxˆr   c                 ó†   — dt          | j        d¬¦  «        t          | j        d¬¦  «        z
                       ¦   «         z
  S )z<
        The provided variance is the circular one.
        r   rN   r   )r"   r6   ÚexprV   s    r   ÚvariancezVonMises.varianceÒ   sF   € ð å'¨Ô(:À!ÐDÑDÔDÝ)¨$Ô*<ÀAÐFÑFÔFñGçŠc‰eŒeñ	ð	
r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚrealÚpositiveÚarg_constraintsÚsupportÚhas_rsampler   r+   rH   rR   r   rW   rY   r`   r   Úno_gradrF   rf   rh   Úpropertyrp   rr   ru   Ú__classcell__)rL   s   @r   r   r   n   sý  ø€ € € € € ðð ð$ *Ô.ÀÔAUÐVÐV€OØÔ€GØ€Kð &*ð		Bð 	Bàð	Bð ð	Bð ˜d‘{ð		Bð
 
ð	Bð 	Bð 	Bð 	Bð 	Bð 	Bð	ð 	ð 	ð ð)�fð )ð )ð )ñ „]ð)ð ð3 ð 3ð 3ð 3ñ „]ð3ð ðJ˜Vð Jð Jð Jñ „]ðJð €U„]�_„_Ø", %¤*¡,¤,ð ð ð ñ „_ðð Oð Oð Oð Oð Oð Oð ð�fð ð ð ñ „Xðð ð�fð ð ð ñ „Xðð ð

˜&ð 

ð 

ð 

ñ „]ð

ð 

ð 

ð 

ð 

r   )r   )r0   r   Ú	torch.jitr   Útorch.distributionsr   Ú torch.distributions.distributionr   Útorch.distributions.utilsr   r   Ú__all__r   Ú_I0_COEF_SMALLÚ_I0_COEF_LARGEÚ_I1_COEF_SMALLÚ_I1_COEF_LARGEr   r   r"   ÚjitÚscript_if_tracingrA   r   © r   r   ú<module>rŽ      sV  ðà €€€à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bð ˆ,€ðð ð ðð ð €ð
ð 
ð 
€ðð ð €ð
ð 
ð 
€ð ˜~Ð.€Ø˜~Ð.€ðð ð ð ð0 „Ôð9ð 9ñ Ôð9ð"o
ð o
ð o
ð o
ð o
ˆ|ñ o
ô o
ð o
ð o
ð o
r   