§
    µ³Ùgx  ã                   ó^  — d Z ddlZddlmZ g d¢Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Z e¦   «         Zd„ Z G d„ de¦  «        Z e¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Z e¦   «         Z G d„ d e¦  «        Z  e ¦   «         Z!dS )!zI Collection of Model instances for use with the odrpack fitting package.
é    N)ÚModel)r   ÚexponentialÚmultilinearÚ	unilinearÚ	quadraticÚ
polynomialc                 ó†   — | d         | dd …         }}|j         d         df|_         |||z                       d¬¦  «        z   S ©Nr   é   ©Úaxis)ÚshapeÚsum)ÚBÚxÚaÚbs       úG/granary/edev/quantum/lib/python3.11/site-packages/scipy/odr/_models.pyÚ_lin_fcnr   
   sE   € ØˆQŒ4��1�2�2”€q€AØŒw�qŒz˜1ˆo€A„Gà��!‘�yŠy˜aˆyÑ Ô Ñ Ð ó    c                 óÞ   — t          j        |j        d         t          ¦  «        }t          j        ||                     ¦   «         f¦  «        }| j        d         |j        d         f|_        |S ©Néÿÿÿÿ)ÚnpÚonesr   ÚfloatÚconcatenateÚravel)r   r   r   Úress       r   Ú_lin_fjbr       sQ   € Ý
Œ�”˜”�UÑ#Ô#€AÝ
Œ.˜!˜QŸWšW™YœY˜Ñ
(Ô
(€CØ”˜”˜aœg bœkÐ*€C„IØ€Jr   c                 ó”   — | dd …         }t          j        ||j        d         f|j        d         z  d¬¦  «        }|j        |_        |S )Nr   r   r   r   )r   Úrepeatr   )r   r   r   s      r   Ú_lin_fjdr#      sF   € Ø	ˆ!ˆ"ˆ"Œ€AÝ
Œ	�!�a”g˜b”k�^ A¤G¨B¤KÑ/°aÐ8Ñ8Ô8€AØŒg€A„GØ€Hr   c                 ó¢   — t          | j        j        ¦  «        dk    r| j        j        d         }nd}t          j        |dz   ft
          ¦  «        S ©Né   r   r   )Úlenr   r   r   r   r   )ÚdataÚms     r   Ú_lin_estr*      sG   € õ
 ˆ4Œ6Œ<ÑÔ˜AÒÐØŒFŒL˜ŒOˆˆàˆåŒ7�A˜‘E�8�UÑ#Ô#Ð#r   c                 ó¬   — | d         | dd …         }}|j         d         df|_         |t          j        |t          j        ||¦  «        z  d¬¦  «        z   S r
   ©r   r   r   Úpower)r   r   Úpowersr   r   s        r   Ú	_poly_fcnr/   ,   sS   € ØˆQŒ4��1�2�2”€q€AØŒw�qŒz˜1ˆo€A„Gà�rŒv�a�"œ( 1 fÑ-Ô-Ñ-°AÐ6Ñ6Ô6Ñ6Ð6r   c                 óæ   — t          j        t          j        |j        d         t          ¦  «        t          j        ||¦  «        j        f¦  «        }| j        d         |j        d         f|_        |S r   )r   r   r   r   r   r-   Úflat)r   r   r.   r   s       r   Ú_poly_fjacbr2   3   s[   € Ý
Œ.�"œ' !¤'¨"¤+­uÑ5Ô5Ýœ( 1 fÑ-Ô-Ô2ð4ñ 5ô 5€Cà”˜”˜aœg bœkÐ*€C„IØ€Jr   c                 ó¦   — | dd …         }|j         d         df|_         ||z  }t          j        |t          j        ||dz
  ¦  «        z  d¬¦  «        S )Nr   r   r   r,   )r   r   r.   r   s       r   Ú_poly_fjacdr4   :   sS   € Ø	ˆ!ˆ"ˆ"Œ€AØŒw�qŒz˜1ˆo€A„Gà	ˆF‰
€AåŒ6�!•b”h˜q &¨¡(Ñ+Ô+Ñ+°!Ð4Ñ4Ô4Ð4r   c                 óN   — | d         t          j        | d         |z  ¦  «        z   S ©Nr   r   ©r   Úexp©r   r   s     r   Ú_exp_fcnr:   C   ó#   € ØˆQŒ4•"”&˜˜1œ ™Ñ"Ô"Ñ"Ð"r   c                 óN   — | d         t          j        | d         |z  ¦  «        z  S )Nr   r7   r9   s     r   Ú_exp_fjdr=   G   r;   r   c                 óÜ   — t          j        t          j        |j        d         t          ¦  «        |t          j        | d         |z  ¦  «        z  f¦  «        }d|j        d         f|_        |S )Nr   r   r&   )r   r   r   r   r   r8   )r   r   r   s      r   Ú_exp_fjbr?   K   sV   € Ý
Œ.�"œ' !¤'¨"¤+­uÑ5Ô5°q½2¼6À!ÀAÄ$ÈÁ(Ñ;KÔ;KÑ7KÐLÑ
MÔ
M€CØ�A”G˜B”KÐ €C„IØ€Jr   c                 ó.   — t          j        ddg¦  «        S )Nç      ð?)r   Úarray©r(   s    r   Ú_exp_estrD   Q   s   € åŒ8�R˜�HÑÔÐr   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_MultilinearModela  
    Arbitrary-dimensional linear model

    This model is defined by :math:`y=\beta_0 + \sum_{i=1}^m \beta_i x_i`

    Examples
    --------
    We can calculate orthogonal distance regression with an arbitrary
    dimensional linear model:

    >>> from scipy import odr
    >>> import numpy as np
    >>> x = np.linspace(0.0, 5.0)
    >>> y = 10.0 + 5.0 * x
    >>> data = odr.Data(x, y)
    >>> odr_obj = odr.ODR(data, odr.multilinear)
    >>> output = odr_obj.run()
    >>> print(output.beta)
    [10.  5.]

    c           
      ó„   •— t          ¦   «                              t          t          t          t
          ddddœ¬¦  «         d S )NzArbitrary-dimensional Linearz y = B_0 + Sum[i=1..m, B_i * x_i]z&$y=\beta_0 + \sum_{i=1}^m \beta_i x_i$©ÚnameÚequÚTeXequ)ÚfjacbÚfjacdÚestimateÚmeta)ÚsuperÚ__init__r   r    r#   r*   ©ÚselfÚ	__class__s    €r   rQ   z_MultilinearModel.__init__m   sQ   ø€ Ý‰Œ×ÒÝ�H­H½xØ8Ø;ØEðGð Gð 	ñ 	Hô 	Hð 	Hð 	Hð 	Hr   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__rQ   Ú__classcell__©rT   s   @r   rF   rF   V   sK   ø€ € € € € ðð ð,Hð Hð Hð Hð Hð Hð Hð Hð Hr   rF   c                 ó4  — t          j        | ¦  «        }|j        dk    rt          j        d|dz   ¦  «        }t	          |¦  «        df|_        t	          |¦  «        dz   }|fd„}t          t          t          t          ||fdd|dz
  z  d|dz
  z  dœ¬¦  «        S )	a²  
    Factory function for a general polynomial model.

    Parameters
    ----------
    order : int or sequence
        If an integer, it becomes the order of the polynomial to fit. If
        a sequence of numbers, then these are the explicit powers in the
        polynomial.
        A constant term (power 0) is always included, so don't include 0.
        Thus, polynomial(n) is equivalent to polynomial(range(1, n+1)).

    Returns
    -------
    polynomial : Model instance
        Model instance.

    Examples
    --------
    We can fit an input data using orthogonal distance regression (ODR) with
    a polynomial model:

    >>> import numpy as np
    >>> import matplotlib.pyplot as plt
    >>> from scipy import odr
    >>> x = np.linspace(0.0, 5.0)
    >>> y = np.sin(x)
    >>> poly_model = odr.polynomial(3)  # using third order polynomial model
    >>> data = odr.Data(x, y)
    >>> odr_obj = odr.ODR(data, poly_model)
    >>> output = odr_obj.run()  # running ODR fitting
    >>> poly = np.poly1d(output.beta[::-1])
    >>> poly_y = poly(x)
    >>> plt.plot(x, y, label="input data")
    >>> plt.plot(x, poly_y, label="polynomial ODR")
    >>> plt.legend()
    >>> plt.show()

    © r   c                 ó8   — t          j        |ft          ¦  «        S )N)r   r   r   )r(   Úlen_betas     r   Ú	_poly_estzpolynomial.<locals>._poly_est©   s   € åŒw˜�{¥EÑ*Ô*Ð*r   zSorta-general Polynomialz$y = B_0 + Sum[i=1..%s, B_i * (x**i)]z)$y=\beta_0 + \sum_{i=1}^{%s} \beta_i x^i$rH   )rM   rL   rN   Ú
extra_argsrO   )	r   Úasarrayr   Úaranger'   r   r/   r4   r2   )Úorderr.   r_   r`   s       r   r   r   x   s¼   € õR ŒZ˜ÑÔ€FØ„|�rÒÐå”˜1˜f q™jÑ)Ô)ˆå˜‘K”K Ð#€F„LÝ�6‰{Œ{˜Q‰€Hà!)ð +ð +ð +ð +õ •¥+µ[Ø#°°	Ø9Ø>À(È1Á*ÑMØGØ! !™ñ%ð&ð &ð'ñ 'ô 'ð 'r   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_ExponentialModelaß  
    Exponential model

    This model is defined by :math:`y=\beta_0 + e^{\beta_1 x}`

    Examples
    --------
    We can calculate orthogonal distance regression with an exponential model:

    >>> from scipy import odr
    >>> import numpy as np
    >>> x = np.linspace(0.0, 5.0)
    >>> y = -10.0 + np.exp(0.5*x)
    >>> data = odr.Data(x, y)
    >>> odr_obj = odr.ODR(data, odr.exponential)
    >>> output = odr_obj.run()
    >>> print(output.beta)
    [-10.    0.5]

    c           
      ó„   •— t          ¦   «                              t          t          t          t
          ddddœ¬¦  «         d S )NÚExponentialzy= B_0 + exp(B_1 * x)z$y=\beta_0 + e^{\beta_1 x}$rH   ©rM   rL   rN   rO   )rP   rQ   r:   r=   r?   rD   rR   s    €r   rQ   z_ExponentialModel.__init__Ë   sQ   ø€ Ý‰Œ×Ò�­½Ý"*Ø'4Ø&=Ø)GðIð Ið 	ñ 	Jô 	Jð 	Jð 	Jð 	Jr   rU   r[   s   @r   rf   rf   µ   óK   ø€ € € € € ðð ð*Jð Jð Jð Jð Jð Jð Jð Jð Jr   rf   c                 ó*   — || d         z  | d         z   S r6   r]   r9   s     r   Ú_unilinrl   Ö   s   € ØˆQˆqŒT‰6�A�a”D‰=Ðr   c                 óR   — t          j        |j        t          ¦  «        | d         z  S )Nr   )r   r   r   r   r9   s     r   Ú_unilin_fjdrn   Ú   s   € ÝŒ7�1”7�EÑ"Ô" Q q¤TÑ)Ð)r   c                 óŠ   — t          j        |t          j        |j        t          ¦  «        f¦  «        }d|j        z   |_        |S )N)r&   ©r   r   r   r   r   ©r   r   Ú_rets      r   Ú_unilin_fjbrs   Þ   s6   € ÝŒ>˜1�bœg a¤g­uÑ5Ô5Ð6Ñ7Ô7€DØ˜œ‘€D„Jà€Kr   c                 ó   — dS )N)rA   rA   r]   rC   s    r   Ú_unilin_estru   å   s   € Øˆ8r   c                 óB   — ||| d         z  | d         z   z  | d         z   S )Nr   r   r&   r]   r9   s     r   Ú
_quadraticrw   é   s&   € Øˆa��!”‰f�q˜”t‰mÑ˜q œtÑ#Ð#r   c                 ó0   — d|z  | d         z  | d         z   S r%   r]   r9   s     r   Ú	_quad_fjdry   í   s   € ØˆQ‰3ˆq�Œt‰8�a˜”d‰?Ðr   c                 ó’   — t          j        ||z  |t          j        |j        t          ¦  «        f¦  «        }d|j        z   |_        |S )N)é   rp   rq   s      r   Ú	_quad_fjbr|   ñ   s<   € ÝŒ>˜1˜Q™3 ¥2¤7¨1¬7µEÑ#:Ô#:Ð;Ñ<Ô<€DØ˜œ‘€D„Jà€Kr   c                 ó   — dS )N)rA   rA   rA   r]   rC   s    r   Ú	_quad_estr~   ø   s   € Øˆ:r   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_UnilinearModelaÑ  
    Univariate linear model

    This model is defined by :math:`y = \beta_0 x + \beta_1`

    Examples
    --------
    We can calculate orthogonal distance regression with an unilinear model:

    >>> from scipy import odr
    >>> import numpy as np
    >>> x = np.linspace(0.0, 5.0)
    >>> y = 1.0 * x + 2.0
    >>> data = odr.Data(x, y)
    >>> odr_obj = odr.ODR(data, odr.unilinear)
    >>> output = odr_obj.run()
    >>> print(output.beta)
    [1. 2.]

    c           
      ó„   •— t          ¦   «                              t          t          t          t
          ddddœ¬¦  «         d S )NzUnivariate Linearzy = B_0 * x + B_1z$y = \beta_0 x + \beta_1$rH   ri   )rP   rQ   rl   rn   rs   ru   rR   s    €r   rQ   z_UnilinearModel.__init__  sQ   ø€ Ý‰Œ×Ò�­½;Ý"-Ø':Ø&9Ø)FðHð Hð 	ñ 	Iô 	Ið 	Ið 	Ið 	Ir   rU   r[   s   @r   r€   r€   ü   sK   ø€ € € € € ðð ð*Ið Ið Ið Ið Ið Ið Ið Ið Ir   r€   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_QuadraticModelaè  
    Quadratic model

    This model is defined by :math:`y = \beta_0 x^2 + \beta_1 x + \beta_2`

    Examples
    --------
    We can calculate orthogonal distance regression with a quadratic model:

    >>> from scipy import odr
    >>> import numpy as np
    >>> x = np.linspace(0.0, 5.0)
    >>> y = 1.0 * x ** 2 + 2.0 * x + 3.0
    >>> data = odr.Data(x, y)
    >>> odr_obj = odr.ODR(data, odr.quadratic)
    >>> output = odr_obj.run()
    >>> print(output.beta)
    [1. 2. 3.]

    c           
      ó„   •— t          ¦   «                              t          t          t          t
          ddddœ¬¦  «         d S )NÚ	Quadraticzy = B_0*x**2 + B_1*x + B_2z&$y = \beta_0 x^2 + \beta_1 x + \beta_2rH   ri   )rP   rQ   rw   ry   r|   r~   rR   s    €r   rQ   z_QuadraticModel.__init__3  sQ   ø€ Ý‰Œ×ÒÝ�i­yÅ9Ø%Ø5ØGðIð Ið 	ñ 	Jô 	Jð 	Jð 	Jð 	Jr   rU   r[   s   @r   rƒ   rƒ     rj   r   rƒ   )"rY   Únumpyr   Úscipy.odr._odrpackr   Ú__all__r   r    r#   r*   r/   r2   r4   r:   r=   r?   rD   rF   r   r   rf   r   rl   rn   rs   ru   rw   ry   r|   r~   r€   r   rƒ   r   r]   r   r   ú<module>r‰      su  ððð à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ðð ð €ð!ð !ð !ðð ð ðð ð ð
$ð 
$ð 
$ð7ð 7ð 7ðð ð ð5ð 5ð 5ð#ð #ð #ð#ð #ð #ðð ð ðð ð ð
Hð Hð Hð Hð H˜ñ Hô Hð Hð>  ÐÑ!Ô!€ð:'ð :'ð :'ðzJð Jð Jð Jð J˜ñ Jô Jð Jð<  ÐÑ!Ô!€ðð ð ð*ð *ð *ðð ð ðð ð ð$ð $ð $ðð ð ðð ð ðð ð ðIð Ið Ið Ið I�eñ Iô Ið Ið< ˆOÑÔ€	ðJð Jð Jð Jð J�eñ Jô Jð Jð< ˆOÑÔ€	€	€	r   