§
    fŠtjÈ7  ã                   ó¼   — d Z ddlZddlmZmZmZmZ ddlmZ dZ	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ ZdS )zù
This module provides some basic linear algebra procedures.

Translated from Zaikun Zhang's modern-Fortran reference implementation in PRIMA.

Dedicated to late Professor M. J. D. Powell FRS (1936--2015).

Python translation by Nickolai Belakovski.
é    Né   )Ú	DEBUGGINGÚEPSÚREALMAXÚREALMIN)ÚpresentFc                 ó¨   — t           st          j        | |¦  «        S d}t          t	          | ¦  «        ¦  «        D ]}|| |         ||         z  z  }Œ|S )Nr   )ÚUSE_NAIVE_MATHÚnpÚdotÚrangeÚlen©ÚxÚyÚresultÚis       ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/_lib/pyprima/common/linalg.pyÚinprodr      sW   € Ýð ÝŒv�a˜‰|Œ|ÐØ€FÝ•3�q‘6”6‰]Œ]ð ð ˆØ�!�A”$˜˜1œ‘+ÑˆˆØ€Mó    c                 ó¸   — t          j        |j        d         ¦  «        }t          |j        d         ¦  «        D ]}t	          | |d d …|f         ¦  «        ||<   Œ |S )Nr   )r   ÚzerosÚshaper   r   r   s       r   Ú	matprod12r   %   sZ   € ÝŒX�a”g˜a”jÑ!Ô!€FÝ�1”7˜1”:ÑÔð 'ð 'ˆÝ˜1˜a    1 œgÑ&Ô&ˆˆq‰	ˆ	Ø€Mr   c                 ó®   — t          j        | j        d         ¦  «        }t          | j        d         ¦  «        D ]}|| d d …|f         ||         z  z  }Œ|S ©Nr   r   ©r   r   r   r   r   s       r   Ú	matprod21r   ,   sY   € ÝŒX�a”g˜a”jÑ!Ô!€FÝ�1”7˜1”:ÑÔð !ð !ˆØ�!�A�A�A�q�D”'˜A˜aœD‘.Ñ ˆˆØ€Mr   c           	      ó$  — t          j        | j        d         |j        d         f¦  «        }t          |j        d         ¦  «        D ]H}t          | j        d         ¦  «        D ]+}|d d …|fxx         | d d …|f         |||f         z  z  cc<   Œ,ŒI|S r   r   )r   r   r   r   Újs        r   Ú	matprod22r!   3   sŸ   € ÝŒX�q”w˜q”z 1¤7¨1¤:Ð.Ñ/Ô/€FÝ�1”7˜1”:ÑÔð .ð .ˆÝ�q”w˜q”zÑ"Ô"ð 	.ð 	.ˆAØ�1�1�1�a�4ˆLˆLŒL˜A˜a˜a˜a ˜dœG a¨¨1¨¤gÑ-Ñ-ˆLˆL‰LˆLð	.à€Mr   c                 óX  — t           s| |z  S t          | j        ¦  «        dk    r(t          |j        ¦  «        dk    rt          | |¦  «        S t          | j        ¦  «        dk    r(t          |j        ¦  «        dk    rt	          | |¦  «        S t          | j        ¦  «        dk    r(t          |j        ¦  «        dk    rt          | |¦  «        S t          | j        ¦  «        dk    r(t          |j        ¦  «        dk    rt          | |¦  «        S t          d| j        › d|j        › �¦  «        ‚)Nr   é   zInvalid shapes for x and y: z and )r
   r   r   r   r   r   r!   Ú
ValueError)r   r   s     r   Úmatprodr%   ;   s  € Ýð Ø�‰sˆ
Ý
ˆ1Œ7�|„|�qÒÐ�S ¤™\œ\¨QÒ.Ð.Ý�a˜‰|Œ|ÐÝ	ˆQŒW‰Œ˜Ò	Ð	�s 1¤7™|œ|¨qÒ0Ð0Ý˜˜A‰ŒÐÝ	ˆQŒW‰Œ˜Ò	Ð	�s 1¤7™|œ|¨qÒ0Ð0Ý˜˜A‰ŒÐÝ	ˆQŒW‰Œ˜Ò	Ð	�s 1¤7™|œ|¨qÒ0Ð0Ý˜˜A‰ŒÐåÐO¸¼ÐOÐOÀaÄgÐOÐOÑPÔPÐPr   c                 ó   — t           st          j        | |¦  «        S t          j        t	          | ¦  «        t	          |¦  «        f¦  «        }t          t	          | ¦  «        ¦  «        D ]}| ||         z  |d d …|f<   Œ|S ©N)r
   r   Úouterr   r   r   r   s       r   Úoutprodr)   J   su   € Ýð ÝŒx˜˜1‰~Œ~ÐÝŒX•s˜1‘v”v�s 1™vœvÐ&Ñ'Ô'€FÝ•3�q‘6”6‰]Œ]ð $ð $ˆØ˜q œt™8ˆF�1�1�1�a�4‰LˆLØ€Mr   c           	      ó^  — t           s(t          j                             | |d ¬¦  «        d         S | j        d         }| j        d         }t          ||¦  «        }t          j        |¦  «        }|                     ¦   «         }t          |dz
  dd¦  «        D ]–}	t          ||d d …|	f         ¦  «        }
t          t          j
        |¦  «        t          j
        |d d …|	f         ¦  «        ¦  «        }t          |
|¦  «        rd||	<   Œp|
||	         z  ||	<   |||	         | d d …|	f         z  z
  }Œ—|S )N)Úrcondr   r   éÿÿÿÿ)r
   r   ÚlinalgÚlstsqr   Úminr   Úcopyr   r   ÚabsÚisminor)ÚAÚbÚQÚRdiagÚmÚnÚrankr   r   r   ÚyqÚyqas               r   Úlsqrr<   S   s  € Ýð 4ÝŒy�Š˜q !¨4ˆÑ0Ô0°Ô3Ð3à	Œ�Œ
€AØ	Œ�Œ
€Aåˆq�!‰9Œ9€Då
Œ�‰Œ€AØ	�Š‰Œ€Aå�4˜!‘8˜R Ñ$Ô$ð #ð #ˆÝ�A�q˜˜˜˜A˜”wÑÔˆÝ•R”V˜A‘Y”Y¥¤ q¨¨¨¨A¨¤w¡¤Ñ0Ô0ˆÝ�2�sÑÔð 	#ØˆAˆa‰DˆDà˜˜aœ‘=ˆAˆa‰DØ�A�a”D˜1˜Q˜Q˜Q ˜Tœ7‘NÑ"ˆAˆAØ€Hr   c                 óô  — t           st          j        | |¦  «        S t          j        | ¦  «        st	          | ¦  «        }�n6t          j        |¦  «        st	          |¦  «        }�nt	          t          j        | |g¦  «        ¦  «        }t          j        t          |¦  «        t          |¦  «        g¦  «        }|d         t          j        t          ¦  «        k    rK|d         t          j        t          dz  ¦  «        k     r%t          j        t          ||z  ¦  «        ¦  «        }nP|d         dk    rB|d         t          j        |d         |d         z  |d         |d         z  z  dz   ¦  «        z  }nd}|S )Nr   r   çÍÌÌÌÌÌ @)r
   r   ÚhypotÚisfiniter1   Úarrayr/   ÚmaxÚsqrtr   r   Úsum)Úx1Úx2Úrr   s       r   r?   r?   j   s4  € Ýð  ÝŒx˜˜BÑÔÐÝŒ;�r‰?Œ?ð Ý�‰GŒGˆ‰ÝŒ[˜‰_Œ_ð 
Ý�‰GŒGˆ‰å•”˜"˜b˜Ñ"Ô"Ñ#Ô#ˆÝŒH•c˜!‘f”f�c !™fœfÐ%Ñ&Ô&ˆØˆQŒ4•"”'�'Ñ"Ô"Ò"Ð" q¨¤t­b¬gµg¸c±kÑ.BÔ.BÒ'BÐ'BÝ”�˜A˜a™C™œÑ!Ô!ˆAˆAØˆqŒT�AŠXˆXØ�!”•r”w  !¤ Q q¤T¡	¨A¨a¬D°°1´©IÑ6¸Ñ:Ñ;Ô;Ñ;ˆAˆAàˆAØ€Hr   c                 ó¨   — t           st          j                             | ¦  «        S t          j        t          d„ | D ¦   «         ¦  «        ¦  «        }|S )Nc                 ó   — g | ]}||z  ‘ŒS © rJ   )Ú.0Úxis     r   ú
<listcomp>znorm.<locals>.<listcomp>ƒ   s   € Ð,Ð,Ð, B˜"˜R™%Ð,Ð,Ð,r   )r
   r   r-   ÚnormrC   rD   )r   r   s     r   rN   rN   }   sK   € Ýð !ÝŒy�~Š~˜aÑ Ô Ð õ ŒW•SÐ,Ð,¨!Ð,Ñ,Ô,Ñ-Ô-Ñ.Ô.€FØ€Mr   c                 ó†   — t          t          | ¦  «        t          j        t          | ¦  «        ¦  «        z
  ¦  «        |k    S r'   )Úprimasumr1   r   Útril©r3   Útols     r   ÚistrilrT   ‡   ó.   € Ý•C˜‘F”F�RœW¥S¨¡V¤V™_œ_Ñ,Ñ-Ô-°Ò4Ð4r   c                 ó†   — t          t          | ¦  «        t          j        t          | ¦  «        ¦  «        z
  ¦  «        |k    S r'   )rP   r1   r   ÚtriurR   s     r   ÚistriurX   Š   rU   r   c                 ón  — t           st          j                             | ¦  «        S |                      ¦   «         } | j        d         }t          | ¦  «        r�| j        }t          j        ||f¦  «        }t          |¦  «        D ]M}d|||f         z  |||f<   t          |d |…d |…f         |d |…|f         ¦  «         |||f         z  |d |…|f<   ŒN|j        S t          | ¦  «        rtt          j        ||f¦  «        }t          |¦  «        D ]M}d| ||f         z  |||f<   t          |d |…d |…f         | d |…|f         ¦  «         | ||f         z  |d |…|f<   ŒNnÚt          | ¦  «        \  }}}|j        }t          j        ||f¦  «        }t          |dz
  dd¦  «        D ]M}|d d …|f         t          |d d …|dz   |…f         ||dz   |…|f         ¦  «        z
  |||f         z  |d d …|f<   ŒNt          j        |t          ¬¦  «        }t          j        d|dz
  |¦  «        ||<   |d d …|f         j        }|S )Nr   r   r,   ©Údtype)r
   r   r-   Úinvr0   r   rT   ÚTr   r   r%   rX   ÚqrÚintÚlinspace)r3   r8   ÚRÚBr   r5   ÚPÚInvPs           r   r\   r\   Ž   sm  € Ýð  ÝŒy�}Š}˜QÑÔÐØ	�Š‰Œ€AØ	Œ�Œ
€AÝˆa�y„yð àŒCˆÝŒH�a˜�VÑÔˆÝ�q‘”ð 	?ð 	?ˆAØ˜!˜A˜q˜Dœ'‘kˆAˆa�ˆd‰GÝ  " 1 " b q b &¤	¨1¨R¨a¨R°¨U¬8Ñ4Ô4Ð4°q¸¸A¸´wÑ>ˆAˆbˆqˆb�!ˆe‰HˆHØŒsˆ
Ý	�‰Œð ÝŒH�a˜�VÑÔˆÝ�q‘”ð 	?ð 	?ˆAØ˜!˜A˜q˜Dœ'‘kˆAˆa�ˆd‰GÝ  " 1 " b q b &¤	¨1¨R¨a¨R°¨U¬8Ñ4Ô4Ð4°q¸¸A¸´wÑ>ˆAˆbˆqˆb�!ˆe‰HˆHð	?õ
 �Q‘%”%‰ˆˆ1ˆaØŒCˆÝŒH�a˜�VÑÔˆÝ�q˜1‘u˜b "Ñ%Ô%ð 	Rð 	RˆAØ˜˜˜˜A˜”w¥¨¨1¨1¨1¨a°!©e°A¨g¨:¬¸¸!¸a¹%À¸'À1¸*¼Ñ!FÔ!FÑFÈ!ÈAÈqÈDÌ'ÑQˆAˆaˆaˆa�ˆd‰GˆGÝŒx˜¥Ð%Ñ%Ô%ˆÝ”+˜a  1¡ aÑ(Ô(ˆˆQ‰Øˆaˆaˆa�ˆgŒJŒLˆØ€Hr   c                 óˆ  — | j         d         }| j         d         }t          j        |¦  «        }| j        }t          j        d|dz
  |t
          ¬¦  «        }t          |¦  «        D �]Q}t          j        t          t          |||dz   …||dz   …f         ¦  «        d¬¦  «        d¬¦  «        }|dk    r?|||z
  dz
  k    r3||z  }||         ||         c||<   ||<   |||gd d …f         |||gd d …f<   t          |dz
  |d¦  «        D ]°}t          ||||gf         ¦  «        j        }	t          j        t          |||f         |||f         ¦  «        d¦  «        ||||gf<   t          ||dz   |dz   …||gf         |	¦  «        ||dz   |dz   …||gf<   t          |d d …||gf         |	¦  «        |d d …||gf<   Œ±�ŒS|j        }
||
|fS )Nr   r   rZ   ©Úaxisr,   )r   r   Úeyer]   r`   r_   r   ÚargmaxrP   Ú	primapow2ÚplanerotÚappendr?   r%   )r3   r7   r8   r5   r]   rc   r    Úkr   ÚGra   s              r   r^   r^   ­   sÿ  € Ø	Œ�Œ
€AØ	Œ�Œ
€Aå
Œˆq‰	Œ	€AØ	Œ€AÝ
Œ�A�q˜‘s˜A¥SÐ)Ñ)Ô)€Aå�1‰XŒXð 
4ñ 
4ˆÝŒI•h�y¨¨1¨Q¨q©S¨5°!°A°a±C°%¨<¬Ñ9Ô9ÀÐBÑBÔBÈÐKÑKÔKˆØˆqŠ5ˆ5�Q˜!˜a™% !™)’^�^Ø�‰FˆAØ˜1œ˜q œtˆJˆAˆa‰D�!�A‘$Ø˜a ˜V Q Q Q˜Yœ<ˆAˆq�!ˆf�a�a�aˆi‰LÝ�q˜‘s˜A˜rÑ"Ô"ð 	4ð 	4ˆAÝ˜˜1˜q !˜f˜9œÑ&Ô&Ô(ˆAÝœ9¥U¨1¨Q°¨T¬7°A°a¸°d´GÑ%<Ô%<¸aÑ@Ô@ˆAˆa�!�Q�ˆi‰LÝ%,¨Q¨q°1©u°Q¸±U¨{¸QÀ¸FÐ/BÔ-CÀQÑ%GÔ%GˆAˆa�!‰e�A˜‘Eˆk˜A˜q˜6Ð!Ñ"Ý" 1 Q Q Q¨¨A¨ Y¤<°Ñ3Ô3ˆAˆaˆaˆa�!�Q�ˆi‰LˆLñ		4ð 	
Œ€Aàˆa�ˆ7€Nr   c                 ó4  — t           st          j        | |¬¦  «        S |€8| j        dk    rt          t	          | d¬¦  «        ¦  «        S t          | ¦  «        S |dk    rZt          j        | j        d         ¦  «        }t          | j        d         ¦  «        D ]}t          | dd…|f         ¦  «        ||<   Œ|S |dk    rZt          j        | j        d         ¦  «        }t          | j        d         ¦  «        D ]}t          | |dd…f         ¦  «        ||<   Œ|S dS )zâ
    According to its documentation, np.sum will sometimes do partial pairwise summation.
    For our purposes, when comparing, we want don't want to do anything fancy, and we
    just want to add things up one at a time.
    rf   Nr#   r   r   )r
   r   rD   ÚndimrP   r   r   r   )r   rg   r   r   s       r   rP   rP   Æ   s  € õ ð $ÝŒv�a˜dÐ#Ñ#Ô#Ð#Ø€|ØŒ6�QŠ;ˆ;å•x ¨Ð*Ñ*Ô*Ñ+Ô+Ð+å�q‘6”6ˆMØ	�ŠˆÝ”˜!œ' !œ*Ñ%Ô%ˆÝ�q”w˜q”zÑ"Ô"ð 	%ð 	%ˆAÝ˜A˜a˜a˜a ˜dœG™œˆF�1‰IˆIØˆØ	�ŠˆÝ”˜!œ' !œ*Ñ%Ô%ˆÝ�q”w˜q”zÑ"Ô"ð 	%ð 	%ˆAÝ˜A˜a   ˜dœG™œˆF�1‰IˆIØˆð	 
ˆr   c                 ó   — | | z  S )a@  
    Believe it or now, x**2 is not always the same as x*x in Python. In Fortran they
    appear to be identical. Here's a quick one-line to find an example on your system
    (well, two liner after importing numpy):
    list(filter(lambda x: x[1], [(x:=np.random.random(), x**2 - x*x != 0) for _ in range(10000)]))
    rJ   )r   s    r   rj   rj   à   s   € ð ˆQ‰3€Jr   c           
      ó
  — t           rt          | ¦  «        dk    s
J d¦   «         ‚t          t          j        | ¦  «        ¦  «        rd}d}�nt          t          j        | ¦  «        ¦  «        rfdt          j        d¦  «        z  t          j        | d         ¦  «        z  }dt          j        d¦  «        z  t          j        | d         ¦  «        z  }�nŒt          | d         ¦  «        dk    rt          | d         ¦  «        dk    rd}d}�nTt          | d         ¦  «        t          t          | d         ¦  «        z  k    rt          j        | d         ¦  «        }d}�nt          | d         ¦  «        t          t          | d         ¦  «        z  k    rd}t          j        | d         ¦  «        }�n°t          t          j        t          j        t          ¦  «        t          j	        | ¦  «        k     t          j	        | ¦  «        t          j        t          dz  ¦  «        k     ¦  «        ¦  «        r't          | ¦  «        }| d         |z  }| d         |z  }�n
t          | d         ¦  «        t          | d         ¦  «        k    ro| d         | d         z  }t          dt          |¦  «        t          j        d||z  z   ¦  «        ¦  «        }|t          j        | d         ¦  «        z  }d|z  }||z  }no| d         | d         z  }t          dt          |¦  «        t          j        d||z  z   ¦  «        g¦  «        }|t          j        | d         ¦  «        z  }||z  }d|z  }t          j        ||g| |gg¦  «        }t           �r€|j        dk    sJ ‚t          j        t          j        |¦  «        ¦  «        sJ ‚t          |d         |d         z
  ¦  «        t          |d	         |d
         z   ¦  «        z   dk    sJ ‚t          j        dt          j        ddt          z  ¦  «        ¦  «        }t+          ||¦  «        sJ ‚t          t          j        t          j        | ¦  «        t          j	        | ¦  «        t          j        t          dz  ¦  «        k     ¦  «        ¦  «        rbt          j                             | ¦  «        }t          t          || z  |dgz
  ¦  «        ¦  «        t          |||z  ¦  «        k    s
J d¦   «         ‚|S )aP  
    As in MATLAB, planerot(x) returns a 2x2 Givens matrix G for x in R2 so that Y=G@x has Y[1] = 0.
    Roughly speaking, G = np.array([[x[0]/R, x[1]/R], [-x[1]/R, x[0]/R]]), where R = np.linalg.norm(x).
    0. We need to take care of the possibilities of R=0, Inf, NaN, and over/underflow.
    1. The G defined above is continuous with respect to X except at 0. Following this definition,
    G = np.array([[np.sign(x[0]), 0], [0, np.sign(x[0])]]) if x[1] == 0,
    G = np.array([[0, np.sign(x[1])], [np.sign(x[1]), 0]]) if x[0] == 0
    Yet some implementations ignore the signs, leading to discontinuity and numerical instability.
    2. Difference from MATLAB: if x contains NaN of consists of only Inf, MATLAB returns a NaN matrix,
    but we return an identity matrix or a matrix of +/-np.sqrt(2). We intend to keep G always orthogonal.
    r#   zx must be a 2-vectorr   r   r>   )r#   r#   )r   r   )r   r   )r   r   )r   r   g»½×Ùß|Û=çš™™™™™¹?g    €„.AzG @ X = [||X||, 0])r   r   Úanyr   ÚisnanÚallÚisinfrC   Úsignr1   r   Úlogical_andr   r   rN   rB   rA   r   r@   ÚmaximumÚminimumÚisorthr-   )r   ÚcÚsrG   ÚtÚurn   rS   s           r   rk   rk   ê   s!  € õ ð 3Ý�1‰vŒv˜Š{ˆ{ˆ{Ð2‰{Œ{ˆ{õ 	�BŒH�Q‰KŒKÑÔð /àˆØˆ‰Ý
�bŒh�q‰kŒkÑ
Ô
ð +à•”˜‘
”
‰N�RœW Q q¤T™]œ]Ñ*ˆØ•”˜‘
”
‰N�RœW Q q¤T™]œ]Ñ*ˆ‰Ý
ˆa�Œd‰)Œ)�qŠ.ˆ.�S  1¤™YœY¨!š^˜^ØˆØˆ‰Ý
ˆa�Œd‰)Œ)•s�S  1¤™YœY‘Ò
&Ð
&õ ŒG�A�a”D‰MŒMˆØˆ‰Ý
ˆa�Œd‰)Œ)•s�S  1¤™YœY‘Ò
&Ð
&ð ˆÝŒG�A�a”D‰MŒMˆ‰õ •”�rœw¥wÑ/Ô/µ"´&¸±)´)Ò;½R¼VÀA¹Y¼YÍÌÕQXÐ[^ÑQ^ÑI_ÔI_Ò=_Ñ`Ô`ÑaÔað 	å�Q‘”ˆAØ�!”�q‘ˆAØ�!”�q‘ˆA‰AÝ�!�A”$‰iŒi�#˜a œd™)œ)Ò#Ð#Ø�!”�q˜”t‘ˆAÝ�A•s˜1‘v”v�rœw q¨1¨Q©3¡wÑ/Ô/Ñ0Ô0ˆAØ•”˜˜1œ‘”ÑˆAØ�A‘ˆAØ�A‘ˆAˆAà�!”�q˜”t‘ˆAÝ�Q�˜A™œ¥¤¨¨A¨a©C©Ñ 0Ô 0Ð1Ñ2Ô2ˆAØ•”˜˜1œ‘”ÑˆAØ�A‘ˆAØ�A‘ˆAå
Œ�1�a�&˜A˜2˜q˜'Ð"Ñ#Ô#€Aõ ñ UØŒw˜%ÒÐÐÐÝŒv•b”k !‘n”nÑ%Ô%Ð%Ð%Ð%Ý�1�T”7˜Q˜tœWÑ$Ñ%Ô%­¨A¨d¬G°a¸´gÑ,=Ñ(>Ô(>Ñ>À!ÒCÐCÐCÐCÝŒj˜¥"¤*¨V°U½S±[Ñ"AÔ"AÑBÔBˆÝ�a˜‰~Œ~ÐÐˆ~Ý�rŒ~�bœk¨!™nœn­b¬f°Q©i¬i½"¼'Å'ÈCÁ-Ñ:PÔ:PÒ.PÑQÔQÑRÔRð 	UÝ”	—’˜qÑ!Ô!ˆAÝ•s˜1˜Q™3 ! Q ™<Ñ(Ô(Ñ)Ô)­S°°c¸A±gÑ->Ô->Ò>Ð>Ð>Ð@TÑ>Ô>Ð>à€Hr   c                 óè   — d}t          |¦  «        |t          | ¦  «        z  z   }t          |¦  «        d|z  t          | ¦  «        z  z   }t          j        t          |¦  «        |k    ||k    ¦  «        S )a#  
    This function tests whether x is minor compared to ref. It is used by Powell, e.g., in COBYLA.
    In precise arithmetic, isminor(x, ref) is true if and only if x == 0; in floating point
    arithmetic, isminor(x, ref) is true if x is 0 or its nonzero value can be attributed to
    computer rounding errors according to ref.
    Larger sensitivity means the function is more strict/precise, the value 0.1 being due to Powell.

    For example:
    isminor(1e-20, 1e300) -> True, because in floating point arithmetic 1e-20 cannot be added to
    1e300 without being rounded to 1e300.
    isminor(1e300, 1e-20) -> False, because in floating point arithmetic adding 1e300 to 1e-20
    dominates the latter number.
    isminor(3, 4) -> False, because 3 can be added to 4 without being rounded off
    rs   r#   )r1   r   Ú
logical_or)r   ÚrefÚsensitivityÚrefaÚrefbs        r   r2   r2   E  sd   € ð  €KÝˆs‰8Œ8�k¥C¨¡F¤FÑ*Ñ*€DÝˆs‰8Œ8�a˜+‘o­¨A©¬Ñ.Ñ.€DÝŒ=�˜S™œ TÒ)¨4°4ª<Ñ8Ô8Ð8r   c                 ó*  — t          j        | d¦  «        }t          r¡t          j        | d¦  «        t          j        | d¦  «        k    sJ ‚t          j        |d¦  «        t          j        |d¦  «        k    sJ ‚t          j        | d¦  «        t          j        |d¦  «        k    sJ ‚t          |¦  «        r|dk    sJ ‚t          |¦  «        r|nXt          j        ddt
          z  t          j        t          j        | d¦  «        t          j        | d¦  «        ¦  «        z  ¦  «        }t          j        ||t          j        t          | ¦  «        ¦  «        z  |t          j        t          |¦  «        ¦  «        z  g¦  «        }t          t          | |¦  «        ¦  «        t          j
        |¦  «        z
  |k                         ¦   «         pGt          t          || ¦  «        t          j
        |¦  «        z
  ¦  «        |k                         ¦   «         }|S )zJ
    This procedure tests whether A = B^{-1} up to the tolerance TOL.
    r   r   gü©ñÒMbP?g      Y@)r   Úsizer   r   r{   r   rz   rB   r1   r%   rh   rv   )r3   rb   rS   r8   Úis_invs        r   ÚisinvrŠ   [  sª  € õ 	Œ��1‰Œ€Aõ ð ÝŒw�q˜!‰}Œ}¥¤¨¨1¡¤Ò-Ð-Ð-Ð-ÝŒw�q˜!‰}Œ}¥¤¨¨1¡¤Ò-Ð-Ð-Ð-ÝŒw�q˜!‰}Œ}¥¤¨¨1¡¤Ò-Ð-Ð-Ð-Ý�3‰<Œ<ð 	Ø˜!’8�8�8�8õ ˜‘”Ð
iˆ#ˆ#¥2¤:¨d°C½#±IÅÄ
Í2Ì7ÐSTÐVWÉ=Ì=ÕZ\ÔZaÐbcÐefÑZgÔZgÑ@hÔ@hÑ4hÑ#iÔ#i€CÝ
Œ&�#�s�RœV¥C¨¡F¤F™^œ^Ñ+¨Sµ2´6½#¸a¹&¼&±>´>Ñ-AÐBÑ
CÔ
C€CÝ•7˜1˜a‘=”=Ñ!Ô!¥B¤F¨1¡I¤IÑ-°#Ò5×:Ò:Ñ<Ô<ÐoÅ#ÅgÈaÐQRÁmÄmÕVXÔV\Ð]^ÑV_ÔV_ÑF_ÑB`ÔB`ÐehÒAh×@mÒ@mÑ@oÔ@o€Fð
 €Mr   c           
      óÆ  — t           rt          |¦  «        r|dk    sJ ‚t          j        | d¦  «        }|t          j        | d¦  «        k    rd}�nt          j        t          t          | ¦  «        ¦  «        ¦  «        rd}nßt          |¦  «        rƒt          t          | j        | ¦  «        t          j	        |¦  «        z
  ¦  «        t          j
        ||t          j        t          | ¦  «        ¦  «        z  ¦  «        k                         ¦   «         }nMt          t          | j        | ¦  «        t          j	        |¦  «        z
  ¦  «        dk                         ¦   «         }|S )zc
    This function tests whether the matrix A has orthonormal columns up to the tolerance TOL.
    r   r   F)r   r   r   rˆ   ru   rP   r1   r%   r]   rh   rz   rB   rv   )r3   rS   Únum_varsÚis_orths       r   r|   r|   y  s*  € õ ð Ý�3‰<Œ<ð 	Ø˜!’8�8�8�8õ Œw�q˜!‰}Œ}€Hà•"”'˜!˜Q‘-”-ÒÐØˆ‰Ý
Œ(•8�C ™FœFÑ#Ô#Ñ
$Ô
$ð KØˆˆå�3‰<Œ<ð 	KÝ�7 1¤3¨™?œ?­R¬V°HÑ-=Ô-=Ñ=Ñ>Ô>Å"Ä*ÈSÐRUÕXZÔX^Õ_bÐcdÑ_eÔ_eÑXfÔXfÑRfÑBgÔBgÒg×lÒlÑnÔnˆGˆGå�7 1¤3¨™?œ?­R¬V°HÑ-=Ô-=Ñ=Ñ>Ô>À!ÒC×HÒHÑJÔJˆGð
 €Nr   c                  óæ   — t          | ¦  «        dk    rt          d¦  «        ‚t          d„ | D ¦   «         ¦  «        }t          d„ | D ¦   «         ¦  «        }dt          z  t          |d¦  «        z  |z  S )aS  
    Get a relative tolerance for a set of arrays. Borrowed from COBYQA

    Parameters
    ----------
    *arrays: tuple
        Set of `numpy.ndarray` to get the tolerance for.

    Returns
    -------
    float
        Relative tolerance for the set of arrays.

    Raises
    ------
    ValueError
        If no array is provided.
    r   z$At least one array must be provided.c              3   ó$   K  — | ]}|j         V — Œd S r'   )rˆ   ©rK   rA   s     r   ú	<genexpr>z!get_arrays_tol.<locals>.<genexpr>®  s$   è è € Ð.Ð.˜eˆuŒzÐ.Ð.Ð.Ð.Ð.Ð.r   c           	   3   ó–   K  — | ]D}t          j        t          j        |t          j        |¦  «                 ¦  «        d ¬¦  «        V — ŒEdS )ç      ð?)ÚinitialN)r   rB   r1   r@   r�   s     r   r‘   z!get_arrays_tol.<locals>.<genexpr>¯  s^   è è € ð ð àõ 	Œ�rŒv�e�BœK¨Ñ.Ô.Ô/Ñ0Ô0¸#Ð>Ñ>Ô>ðð ð ð ð ð r   g      $@r“   )r   r$   rB   r   )Úarraysrˆ   Úweights      r   Úget_arrays_tolr—   ™  s‰   € õ& ˆ6�{„{�aÒÐÝÐ?Ñ@Ô@Ð@ÝÐ.Ð. vÐ.Ñ.Ô.Ñ.Ô.€DÝð ð àðñ ô ñ ô €Fð •#‰:�˜D #™œÑ&¨Ñ/Ð/r   )r   r'   )Ú__doc__Únumpyr   Úconstsr   r   r   r   r   r
   r   r   r   r!   r%   r)   r<   r?   rN   rT   rX   r\   r^   rP   rj   rk   r2   rŠ   r|   r—   rJ   r   r   ú<module>r›      s±  ððð ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð ð €ðð ð ðð ð ðð ð ðð ð ðQð Qð Qðð ð ðð ð ð.ð ð ð&ð ð ð5ð 5ð 5ð 5ð5ð 5ð 5ð 5ðð ð ð>ð ð ð2ð ð ð ð4ð ð ðXð Xð Xðv9ð 9ð 9ð,ð ð ð ð<ð ð ð ð@0ð 0ð 0ð 0ð 0r   