Ë
    âQ(h-õ ã                   óZ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z# d dl$m%c m"Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dlm-Z-m.Z.m/Z/ d dl0m1c m2Z3 d dl4m5Z5 d d	l6m7Z7 d d
l8m9Z9 d dlm:Z; d dlm<Z= d dlm>Z>  G d„ d«      Z? G d„ d«      Z@d„ ZAd„ ZBd„ ZCd„ ZDd„ ZEd„ ZFdFd„ZGdGd„ZHd„ ZI G d„ d«      ZJ G d„ d«      ZKd„ ZLdHd „ZMejœ                  jŸ                  d!d"d#g«      ZP G d$„ d%«      ZQ G d&„ d'«      ZRdId(„ZSd)„ ZTd*„ ZU G d+„ d,«      ZVd-„ ZW G d.„ d/«      ZXd0„ ZYd1„ ZZd2„ Z[ G d3„ d4«      Z\ G d5„ d6«      Z] G d7„ d8«      Z^ G d9„ d:«      Z_d;„ Z`d<„ Za G d=„ d>«      Zbd?„ Zc G d@„ dA«      Zd G dB„ dC«      Ze G dD„ dE«      Zfy)Jé    N)Úsuppress_warnings)Úxp_assert_equalÚxp_assert_close)Úraises)ÚBSplineÚBPolyÚPPolyÚmake_interp_splineÚmake_lsq_splineÚsplevÚsplrepÚsplprepÚsplderÚ
splantiderÚsprootÚsplintÚinsertÚCubicSplineÚ	NdBSplineÚmake_smoothing_splineÚRegularGridInterpolator)Ú_not_a_knotÚ_augkntÚ_woodbury_algorithmÚ_periodic_knotsÚ_make_interp_per_full_matr)Úgenerate_knotsÚmake_splrepÚmake_splprep)Ú	AxisError)Ú_run_concurrent_barrier)Úmake_ndbspl)Ú	_dfitpack)Ú	_bsplines)Ú_dierckxc                   óÈ  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze jB                  jE                  d e#dd «      «      d!„ «       Z$d"„ Z%e jB                  jL                  d#„ «       Z'e jB                  jE                  d$g d%¢«      e jB                  jE                  d& e#d'«      «      d(„ «       «       Z(d)„ Z)d*„ Z*d+„ Z+e jB                  jE                  d,g d-¢«      d.„ «       Z,e jB                  jE                  d,g d-¢«      d/„ «       Z-d0„ Z.d1„ Z/e jB                  jL                  d2„ «       Z0d3„ Z1y4)5ÚTestBSplinec           
      ó®  — t        t        t        ft        fi t	        ddgdgd¬«      ¤Ž t        j                  d¬«      5  t        t        t        fi t	        dt
        j                  gdgd¬«      ¤Ž d d d «       t        t        t        fi t	        dt
        j                  gdgd¬«      ¤Ž t        t        t        fi t	        ddgdgd¬«      ¤Ž t        t        t        fi t	        dgdggdgd¬«      ¤Ž t        t        t        fi t	        g d	¢dgd¬«      ¤Ž t        t        t        fi t	        g d
¢ddgd¬«      ¤Ž t        t        t        fi t	        g d¢g d¢d¬«      ¤Ž t        t        t        fi t	        g d¢g d¢d¬«      ¤Ž t        t        t        fi t	        g d¢g d¢d¬«      ¤Ž d\  }}t        j                  ||z   dz   t
        j                  ¬«      }t
        j                  j                  |«      }t        |||«      }t        ||j                  «       t        ||j                  «       ||j                  k(  sJ ‚y # 1 sw Y   �ŒØxY w)Né   ù              ð?ç      ð?r   ©ÚtÚcÚkÚignore)Úinvalidéÿÿÿÿ©r   r)   é   ©r   r)   r4   é   é   r4   )ç        r8   r+   ç       @ç      @ç      @)r+   r+   r+   Úcubicç      @)r8   r   r)   r)   r4   r6   )r+   r)   r)   ©é   r6   ©Údtype)Úassert_raisesÚ	TypeErrorÚ
ValueErrorr   ÚdictÚnpÚerrstateÚnanÚinfÚarangeÚfloat64Úrandomr   r-   r.   r/   )ÚselfÚnr/   r-   r.   Úbs         úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_bsplines.pyÚ	test_ctorzTestBSpline.test_ctor)   sè  € ä”y¤*Ð-¬wñ 	1Ü˜!˜S˜ b T¨QÔ/ò	1ä�[‰[ Ô*ñ 	SÜœ*¤gÑR´¸¼B¿F¹F¸ÈÀtÈqÔ1QÒR÷	Sä”j¤'ÑN¬T°Q¼¿¹°KÀBÀ4È1Ô-MÒNÜ”j¤'ÑJ¬T°Q¸°GÀ¸tÀqÔ-IÒJÜ”j¤'ÑM¬T°a°S¸1¸#°JÀ2À$È!Ô-LÒMô 	”j¤'ÑK¬T²IÀ!ÀÈÔ-JÒKÜ”j¤'ñ 	<Üš¨R°¨H¸Ô:ò	<ô 	”i¤ñ 	OÜÒ1²\ÀWÔMò	Oä”i¤ñ 	KÜÒ1²\ÀSÔIò	Kô 	”j¤'ñ 	BÜÒ,²
¸aÔ@ò	Bð ‰ˆˆ1Ü�I‰I�a˜‘c˜!‘e¤2§:¡:Ô.ˆÜ�I‰I×Ñ˜QÓˆÜ�A�q˜!Óˆä˜˜1Ÿ3™3ÔÜ˜˜1Ÿ3™3ÔØ�A—C‘CŠxˆ‰x÷;	Sñ 	Sús   Á3I
É
Ic                 ó2  — t        «       }|j                  }t        |j                  |d   dd¬«       t        |j                  |d   dd¬«       |j
                  |d   k(  sJ ‚t        j                  t        «      5  d|_        d d d «       y # 1 sw Y   y xY w)Nr   çVçž¯Ò<©ÚatolÚrtolr)   r4   Úfoo)	Ú_make_random_splineÚtckr   r-   r.   r/   Úpytestr   ÚAttributeError)rM   rO   rY   s      rP   Útest_tckzTestBSpline.test_tckL   s}   € ÜÓ!ˆØ�e‰eˆä˜Ÿ™˜S ™V¨%°eÕ<Ü˜Ÿ™˜S ™V¨%°eÕ<Ø�s‰s�c˜!‘fŠ}Ðˆ}ô �]‰]œ>Ó*ñ 	ØˆAŒE÷	÷ 	ñ 	ús   Á<BÂBc                 ó  — t        j                  ddd«      }t        ddgdgd¬«      }t         ||«      t        j                  |«      dz  «       t        g d¢ddgd¬«      }t         ||«      t        j
                  |d	k  dd
«      «       y )Nr   r)   é
   r:   r,   )r   çffffffÖ?r)   r6   r7   r_   r;   )rF   Úlinspacer   r   Ú	ones_likeÚwhere©rM   ÚxxrO   s      rP   Útest_degree_0zTestBSpline.test_degree_0X   su   € Ü�[‰[˜˜A˜rÓ"ˆä�q˜!�f  ¨Ô*ˆÜ™˜"›œrŸ|™|¨BÓ/°#Ñ5Ô6ä’l q¨! f°Ô2ˆÜ™˜"›œrŸx™x¨¨T©	°3¸Ó<Õ=ó    c                 ó<  — g d¢}g d¢}d}t        |||«      }t        j                  ddd«      }t        |d   t	        |«      z  |d   t	        |dz
  «      z  z   |d   t	        |dz
  «      z  z    ||«      d¬	«       t        t        ||||f«       ||«      d¬	«       y )
Nr5   ©r)   r4   r6   r)   r6   é2   r   r4   ç›+¡†›„=©rU   )r   rF   r`   r   ÚB_012r   )rM   r-   r.   r/   rO   Úxs         rP   Útest_degree_1zTestBSpline.test_degree_1a   s—   € ÚˆÚˆØˆÜ�A�q˜!Óˆä�K‰K˜˜1˜bÓ!ˆÜ˜˜!™œU 1›X™¨¨!©¬U°1°Q±3«Z©Ñ7¸!¸A¹$¼uÀQÀqÁS»z¹/ÑIÙ˜!› 5õ	*äœ˜a ! Q¨ Ó+©Q¨q«T¸Ö>rf   c                 ó„  — d}t        j                  dg|dz   z  dg|dz   z  z   «      }t        j                  g d¢«      }t        |j                  dd«      ddg«      }t	        |||«      }t        j
                  ddd«      }t         ||d	¬
«       ||d	¬
«      d¬«       t        t        ||||f«       ||«      d¬«       y )Nr6   r   r)   ©r+   r9   r:   r;   r2   g      ð¿r9   r^   T©Úextrapolaterj   rk   )rF   Úasarrayr   Úreshaper   r`   r   r   )rM   r/   r-   r.   ÚbpÚbsplrd   s          rP   Útest_bernsteinzTestBSpline.test_bernsteinl   s¶   € àˆÜ�J‰J˜�s˜A˜a™C‘y A 3¨¨!©¡9Ñ,Ó-ˆÜ�J‰JÒ'Ó(ˆÜ�1—9‘9˜R Ó# a¨ VÓ,ˆÜ�q˜!˜QÓˆä�[‰[˜˜b "Ó%ˆÜ™˜2¨4Ô0Ù˜R¨TÔ2¸õ	@äœ˜b 1 a¨ )Ó,Ù˜R› uö	.rf   c           	      óB  — t        «       }|j                  \  }}}t        j                  ||   || dz
     d«      } ||«      }|D �cg c]  }t	        ||||«      ‘Œ }}t        ||d¬«       |D �cg c]  }t        ||||«      ‘Œ }	}t        ||	d¬«       y c c}w c c}w ©Nr)   ri   rj   rk   )rX   rY   rF   r`   Ú_naive_evalr   Ú_naive_eval_2)
rM   rO   r-   r.   r/   rd   Úy_brm   Úy_nÚy_n2s
             rP   Útest_rndm_naive_evalz TestBSpline.test_rndm_naive_evalz   s¢   € ô  Ó!ˆØ—%‘%‰ˆˆ1ˆaÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÙ�‹eˆà02Ö3¨1Œ{˜1˜a  AÕ&Ð3ˆÐ3Ü˜˜S uÕ-à35Ö6¨a”˜a  A qÕ)Ð6ˆÐ6Ü˜˜T¨Ö.ùò	 4ùò 7s   ÁBÁ1Bc           	      ó¼   — t        «       }|j                  \  }}}t        j                  ||   || dz
     d«      }t	         ||«      t        ||||f«      d¬«       y ry   ©rX   rY   rF   r`   r   r   ©rM   rO   r-   r.   r/   rd   s         rP   Útest_rndm_splevzTestBSpline.test_rndm_splevˆ   sV   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜ™˜"›œu R¨!¨Q°¨Ó3¸%Ö@rf   c                 ó‚  — t         j                  j                  d«      }t        j                  |j                  d«      «      }|j                  d«      }t	        ||«      }t        |Ž }|j                  |j                  }}t        j                  ||   || dz
     d«      }t         ||«      t        ||«      d¬«       y )NéÒ  é   r)   éP   rj   rk   )rF   rL   ÚRandomStateÚsortr   r   r-   r/   r`   r   r   )	rM   Úrngrm   ÚyrY   rO   r-   r/   rd   s	            rP   Útest_rndm_splrepzTestBSpline.test_rndm_splrepŽ   s”   € Ü�i‰i×#Ñ# DÓ)ˆÜ�G‰G�C—J‘J˜r“NÓ#ˆØ�J‰J�r‹Nˆä�Q˜‹lˆÜ�SˆMˆà�s‰s�A—C‘Cˆ1ˆÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜ™˜"›œu R¨›~°EÖ:rf   c                 ó<  — t        «       }t        j                  |j                  «      |_        t        j                  |j
                  |j                     |j
                  |j                   dz
     d«      }t         ||«      t        j                  |«      «       y )Nr)   éd   )rX   rF   ra   r.   r`   r-   r/   r   )rM   rO   rd   s      rP   Útest_rndm_unityzTestBSpline.test_rndm_unityš   se   € ÜÓ!ˆÜ�l‰l˜1Ÿ3™3ÓˆŒÜ�[‰[˜Ÿ™˜QŸS™S™ 1§3¡3¨¯© t¨A¡v¡;°Ó4ˆÜ™˜"›œrŸ|™|¨BÓ/Õ0rf   c                 óV  — t         j                  j                  d«      }d\  }}t        j                  |j                  |«      «      }|j                  |ddf¬«      }t	        |||«      }||   || dz
     }}|||z
  |j                  d«      z  z   }	 ||	«      j
                  dk(  sJ ‚y )	Nr…   ©é   r6   é   é   ©Úsizer)   ©r6   r7   é   )r6   r7   r˜   r“   r”   )rF   rL   rˆ   r‰   r   Úshape)
rM   rŠ   rN   r/   r-   r.   rO   ÚtmÚtprd   s
             rP   Útest_vectorizationzTestBSpline.test_vectorization    s¢   € Ü�i‰i×#Ñ# DÓ)ˆØ‰ˆˆ1Ü�G‰G�C—J‘J˜q“MÓ"ˆØ�J‰J˜Q  1˜IˆJÓ&ˆÜ�A�q˜!ÓˆØ�1‘�q˜!˜˜A™‘wˆBˆØ�2˜‘7˜cŸj™j¨Ó3Ñ3Ñ3ˆÙ�‹u�{‰{˜oÒ-Ð-Ñ-rf   c           	      óX  — t         j                  j                  d«      }d\  }}t        j                  |j                  ||z   dz   «      «      }|j                  |«      }t         j                  ||j                  |dz   «      f   }t        |||«      t        |||«      }}|d   |d   z
  }	t        j                  |d   |	z
  |d   |	z   d«      }
t         ||
«       ||
«      d¬«       t         ||
«      t        |
|||f«      d¬«       t         ||
«      t        |
|||f«      d¬«       y )	Nr…   )é!   r6   r)   r2   r   ri   rj   rk   )	rF   rL   rˆ   r‰   Úr_r   r`   r   r   )rM   rŠ   rN   r/   r-   r.   Úc_padrO   Úb_padÚdtrd   s              rP   Ú
test_len_czTestBSpline.test_len_cª   s
  € ô �i‰i×#Ñ# DÓ)ˆØ‰ˆˆ1Ü�G‰G�C—J‘J˜q ™s 1™uÓ%Ó&ˆØ�J‰J�q‹Mˆô —‘�a˜Ÿ™ A a¡C›Ð(Ñ)ˆä˜1˜a Ó#¤W¨Q°°qÓ%9ˆ5ˆàˆr‰U�Q�q‘T‰\ˆÜ�[‰[˜˜1™ ™ A b¡E¨B¡J°Ó3ˆÜ™˜"›™u R›y¨uÕ5Ü™˜"›œu R¨!¨Q°¨Ó3¸%Õ@Ü™˜"›œu R¨!¨U°A¨Ó7¸eÖDrf   c           	      ó°   — t        «       }|j                  \  }}}||   || dz
     }}dD ])  }t         |||g|«       ||dz   |dz
  g|«      dd¬«       Œ+ y )Nr)   ©TFç»½×Ùß|Û=ç•Ö&è.>çH¯¼šò×z>rT   ©rX   rY   r   )	rM   Únum_parallel_threadsrO   r-   Ú_r/   rš   r›   Úextraps	            rP   Útest_endpointszTestBSpline.test_endpoints½   ss   € äÓ!ˆØ—%‘%‰ˆˆ1ˆaØ�1‘�q˜!˜˜A™‘wˆBˆà#ò 	WˆFÜ™A˜r 2˜h¨Ó/Ù˜r E™z¨2°©:Ð6¸Ó?ÀdÐQUöWñ	Wrf   c           	      ó    — t        «       }|j                  \  }}}t         |||dz   | dz
   dz
  «       |||dz   | dz
   dz   «      d¬«       y )Nr)   r¦   r§   rk   r©   )rM   rª   rO   r-   r«   r/   s         rP   Útest_continuityzTestBSpline.test_continuityÇ   s\   € äÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ™˜!˜A˜a™C   1¡˜+¨Ñ-Ó.±°!°A°a±C¸¸¸1¹°+ÀÑ2EÓ0FØö	rf   c           	      óP  — t        «       }|j                  \  }}}|d   |d   z
  }t        j                  ||   |z
  || dz
     |z   d«      }||   |k  ||| dz
     k  z  }t	         |||   d¬«       |||   d¬«      «       t	         ||d¬«      t        ||||fd¬«      «       y )	Nr2   r   r)   ri   Trq   F)Úextr�   )rM   rO   r-   r.   r/   r¢   rd   Úmasks           rP   Útest_extrapzTestBSpline.test_extrapÎ   s¼   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaØˆr‰U�Q�q‘T‰\ˆÜ�[‰[˜˜1™ ™ A q b¨¡d¡G¨b¡L°"Ó5ˆØ�!‘�r‘	˜b 1 a R¨¡T¡7™lÑ+ˆô 	™˜"˜T™(°Ô5Ù˜"˜T™(°Ô6ô	8ô 	™˜"¨$Ô/Ü�b˜1˜a ˜)¨Ô+õ	-rf   c                 ó¼   — t        «       }|j                  \  }}}|d   dz
  |d   dz   g} ||«      }t        j                  t        j                  |«      «      rJ ‚y )Nr   r)   r2   )rX   rY   rF   ÚallÚisnan)rM   rO   r-   r«   r/   rd   Úyys          rP   Útest_default_extrapzTestBSpline.test_default_extrapÝ   sY   € äÓ!ˆØ—%‘%‰ˆˆ1ˆaØ�‰d�Q‰h˜˜"™ ™	Ð"ˆÙˆr‹UˆÜ—6‘6œ"Ÿ(™( 2›,Ô'Ð'Ð'Ð'rf   c           	      ó4  — t         j                  j                  d«      }t        j                  |j                  d«      «      }|j                  d«      }d}t	        |||d¬«      }|j
                  |dz   z
  }|d   |d	   z
  }t        j                  ||   |z
  ||   |z   d
«      }||   |||   z
  ||   ||   z
  z  z   }	t         ||«      t        |	|||f«      «       g d¢}||   |||   z
  ||   ||   z
  z  z   }	t         ||d¬«       ||	d¬«      «       y )Nr…   é   r7   r6   Úperiodicrq   r)   r2   r   ri   )r2   r   ç      à?r)   T)
rF   rL   rˆ   r‰   r   r–   r`   r   r   r   )
rM   rŠ   r-   r.   r/   rO   rN   r¢   rd   Úxys
             rP   Útest_periodic_extrapz TestBSpline.test_periodic_extrapå   s  € Ü�i‰i×#Ñ# DÓ)ˆÜ�G‰G�C—J‘J˜q“MÓ"ˆØ�J‰J�q‹MˆØˆÜ�A�q˜!¨Ô4ˆØ�F‰F�a˜!‘eÑˆàˆr‰U�Q�q‘T‰\ˆÜ�[‰[˜˜1™ ™ A a¡D¨2¡I¨rÓ2ˆØˆq‰T�R˜!˜A™$‘Y 1 Q¡4¨!¨A©$¡;Ñ/Ñ/ˆÜ™˜"›œu R¨!¨Q°¨Ó3Ô4ò ˆØˆq‰T�R˜!˜A™$‘Y 1 Q¡4¨!¨A©$¡;Ñ/Ñ/ˆÜ™˜"¨*Ô5±q¸ÈÔ7NÕOrf   c                 óÚ   — t        «       }|j                  \  }}}t        j                  |||f«      }t	        j
                  ||   ||    d«      }t         ||«       ||«      dd¬«       y )NrŽ   rj   rT   )rX   rY   r	   Úfrom_splinerF   r`   r   )rM   rO   r-   r.   r/   Úpprd   s          rP   Ú
test_ppolyzTestBSpline.test_ppoly÷   sa   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ×Ñ  1 a˜yÓ)ˆä�[‰[˜˜1™˜q ! ™u cÓ*ˆÜ™˜"›™r "›v¨E¸Ö>rf   c                 ój  — t        «       }|j                  \  }}}t        j                  |d   |d   d«      }t        j                  ||f   }t        d|dz   «      D ])  }t        ||||f|¬«      }t        | |||¬«      d¬«       Œ+ t         |||dz   ¬«      t        j                  |«      d¬«       y )	Nr   r2   ri   r)   ©Úder©Únurj   rk   )	rX   rY   rF   r`   rŸ   Úranger   r   Ú
zeros_like)rM   rO   r-   r.   r/   rd   rÅ   Úyds           rP   Útest_derivative_rndmz TestBSpline.test_derivative_rndmÿ   s¤   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ�[‰[˜˜1™˜q ™u bÓ)ˆÜ�U‰U�2�q�5‰\ˆä˜˜A˜a™C“=ò 	;ˆCÜ�r˜A˜q !˜9¨#Ô.ˆBÜ˜B¡ "¨¤°EÖ:ð	;ô
 	™˜"  1¡œ¤r§}¡}°RÓ'8¸uÖErf   c                 óØ  — d}g d¢}t         j                  j                  d«      }t         j                  dd|j                  d«      ddf   }t	        |||«      }t        j
                  g d¢«      }t         |||dk7     dz
  «       |||dk7     dz   «      «       t        j                   |d	«       |d
«      «      rJ ‚t        j
                  ddg«      }t         ||dz
  d¬«       ||dz   d¬«      «       t        j
                  ddg«      }t        j                   ||dz
  d¬«       ||dz   d¬«      «      rJ ‚t        j                   ||dz
  d¬«       ||dz   d¬«      «      rJ ‚y )Nr4   )r2   r2   r   r)   r)   r6   r7   r“   r“   r“   r”   r”   r…   r   r˜   )r)   r6   r7   r“   r“   r¦   g2Hþÿÿÿ@gÎ·   @r6   r7   r)   rÆ   )rF   rL   rˆ   rŸ   r   rs   r   Úallclose)	rM   r/   r-   rŠ   r.   rO   rm   Úx0Úx1s	            rP   Útest_derivative_jumpsz!TestBSpline.test_derivative_jumps  sP  € ð ˆÚ2ˆÜ�i‰i×#Ñ# DÓ)ˆÜ�E‰E�!�Q˜Ÿ
™
 1› q¨!Ð+Ñ,ˆÜ�A�q˜!Óˆô �J‰J’|Ó$ˆÜ™˜!˜A ™F™) eÑ+Ó,Ù˜!˜A ™F™) eÑ+Ó,ô	.ä—;‘;™q ›{©A¨g«JÔ7Ð7Ð7ô �Z‰Z˜˜A˜ÓˆÜ™˜"˜u™*¨Ô+Ù˜"˜u™*¨Ô+ô	-ä�Z‰Z˜˜A˜ÓˆÜ—;‘;™q  e¡°Ô2±A°b¸5±jÀQÔ4GÔHÐHÐHô —;‘;™q  U¡¨qÔ1±1°Q¸±YÀ1Ô3EÔFÐFÐFÐFrf   c           	      óâ  — t        j                  ddd«      }t        j                  g d¢¬«      }t	         ||«      t        ||j                  |j                  |j                  f«      d¬«       t	         ||«      t        |«      d¬«       t        j                  g d¢¬«      }t        j                  d	d
d«      }t	         ||«      t        j                  |dk  ||z  d|z
  d
z  «      d¬«       y )Nr2   r7   r†   ©r   r)   r4   r6   )r-   rj   rk   ©r   r)   r)   r4   r   r4   r^   r)   r9   )rF   r`   r   Úbasis_elementr   r   r-   r.   r/   ÚB_0123rb   rc   s      rP   Útest_basis_element_quadraticz(TestBSpline.test_basis_element_quadratic&  s½   € Ü�[‰[˜˜Q Ó#ˆÜ×!Ñ!¢LÔ1ˆÜ™˜"›Ü˜b 1§3¡3¨¯©¨Q¯S©S /Ó2¸õ	@ä™˜"›Ü˜r›
¨õ	0ô ×!Ñ!¢LÔ1ˆÜ�[‰[˜˜A˜rÓ"ˆÜ™˜"›Ü—‘˜˜a™  B¡¨¨B©°©
Ó3¸%ö	Arf   c           	      óº   — t        «       }|j                  \  }}}t        j                  ||   || dz
     d«      }t	         ||«      t        ||||«      d¬«       y )Nr)   r†   rj   rk   )rX   rY   rF   r`   r   Ú_sum_basis_elementsr‚   s         rP   Útest_basis_element_rndmz#TestBSpline.test_basis_element_rndm3  sU   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜ™˜"›Ô2°2°q¸!¸QÓ?ÀeÖLrf   c                 ó²  — t        «       }|j                  \  }}}|dz  }t        |||«      }t        ||j                  j                  |«      }t        ||j                  j
                  |«      }t        j                  ||   || dz
     d«      }t         ||«      j                   ||«      d¬«       t         ||«      j
                   ||«      d¬«       y )Ny      ð?      @r)   r†   rj   rk   )	rX   rY   r   r.   ÚrealÚimagrF   r`   r   )	rM   rO   r-   r.   r/   ÚccÚb_reÚb_imrd   s	            rP   Ú
test_cmplxzTestBSpline.test_cmplx9  s¬   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaØ�(‰^ˆä�A�r˜1ÓˆÜ�q˜!Ÿ#™#Ÿ(™( AÓ&ˆÜ�q˜!Ÿ#™#Ÿ(™( AÓ&ˆä�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜ™˜"›Ÿ
™
¡D¨£H°5Õ9Ü™˜"›Ÿ
™
¡D¨£H°5Ö9rf   c                 óˆ   — t        j                  g d¢«      }t        j                   |t        j                  «      «      sJ ‚y )NrÓ   )r   rÔ   rF   r¶   rH   ©rM   rO   s     rP   Útest_nanzTestBSpline.test_nanF  s,   € ä×!Ñ!¢,Ó/ˆÜ�x‰x™œ"Ÿ&™&›	Ô"Ð"Ñ"rf   c                 ó  — t        d¬«      }|j                  \  }}}t        |||«      }t        j                  ||   || dz
     d«      }t        d|«      D ].  }|j                  «       }t         |||«       ||«      dd¬«       Œ0 y )Nr˜   ©r/   r)   r†   çê-�™—q=rT   )rX   rY   r   rF   r`   rÈ   Ú
derivativer   )rM   rO   r-   r.   r/   Úb0rd   Újs           rP   Útest_derivative_methodz"TestBSpline.test_derivative_methodK  sƒ   € Ü !Ô$ˆØ—%‘%‰ˆˆ1ˆaÜ�Q˜˜1ÓˆÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜ�q˜!“ò 	FˆAØ—‘“ˆAÜ™B˜r 1›I¡q¨£u°5¸uÖEñ	Frf   c                 óÊ  — t        «       }|j                  \  }}}t        j                  ||   || dz
     d«      }t	         |j                  «       j                  «       |«       ||«      dd¬«       t        j                  |||f   }t        j                  ||f«      }t        |||«      }t	         |j                  «       j                  «       |«       ||«      dd¬«       y )Nr)   r†   rj   rT   )
rX   rY   rF   r`   r   Úantiderivativerç   Úc_Údstackr   r‚   s         rP   Útest_antiderivative_methodz&TestBSpline.test_antiderivative_methodT  sÌ   € ÜÓ!ˆØ—%‘%‰ˆˆ1ˆaÜ�[‰[˜˜1™˜q !  A¡™w¨Ó+ˆÜÐ7˜×(Ñ(Ó*×5Ñ5Ó7¸Ó;Ù˜"› E°õ	7ô �E‰E�!�Q˜�'‰NˆÜ�I‰I�q˜!�fÓˆÜ�A�q˜!ÓˆÜÐ7˜×(Ñ(Ó*×5Ñ5Ó7¸Ó;Ù˜"› E°ö	7rf   c           
      ó	  — t        j                  g d¢«      }t        |j                  dd«      t	        j
                  d«      «       t        |j                  dd«      t	        j
                  d«      «       t        |j                  dd«      t	        j
                  d«      «       t        |j                  dd«      t	        j
                  d«      «       t        |j                  ddd¬	«      t	        j
                  d«      «       t        |j                  ddd
¬	«      t	        j
                  d«      «       t        |j                  ddd
¬	«      t	        j
                  d«      «       t        |j                  ddd
¬	«      t	        j
                  t        j                  dd|j                  «      «      «       d|_	        |j                  «       }t	        j
                   |d«       |d«      z
  «      }t        |j                  dd«      |«       t        |j                  dd«      t	        j
                  d|z  «      «       t        |j                  dd«      |«       t        |j                  dd«      t	        j
                  d|z  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
   |d«      z    |d«      z
  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
   |d«      z    |d«      z
  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
   |d«      z    |d«      z
  d|z  z   «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
  «      «       t        |j                  dd«      t	        j
                   |d«       |d«      z
  d|z  z
  «      «       y )Nr3   r   r)   r¼   ç      à¿r2   r8   Trq   Fr»   r4   i÷ÿÿÿiùÿÿÿiøÿÿÿéüÿÿÿç      ø?r6   g      +@é   r“   iöÿÿÿr7   )r   rÔ   r   Ú	integraterF   rs   Ú_implr   rY   rr   rì   )rM   rO   ÚiÚ
period_ints       rP   Útest_integralzTestBSpline.test_integralb  sI  € Ü×!Ñ!¢)Ó,ˆÜ˜Ÿ™ A qÓ)¬2¯:©:°c«?Ô;Ü˜Ÿ™ A qÓ)¬2¯:©:°hÓ+?Ô@Ü˜Ÿ™ A qÓ)¬2¯:©:°dÓ+;Ô<ô 	˜Ÿ™ B¨Ó*¬B¯J©J°s«OÔ<Ü˜Ÿ™ B¨°t˜Ó<¼b¿j¹jÈ»oÔNÜ˜Ÿ™ B¨°u˜Ó=¼r¿z¹zÈ#»ÔOÜ˜Ÿ™ A r°u˜Ó=¼r¿z¹zÈ(Ó?SÔTô 	˜Ÿ™ A r°u˜Ó=ÜŸ
™
¤5§<¡<°°2°q·u±uÓ#=Ó>ô	@ð #ˆŒØ×ÑÓˆÜ—Z‘Z¡ !£¡q¨£t¡Ó,ˆ
ä˜Ÿ™ A qÓ)¨:Ô6Ü˜Ÿ™ A qÓ)¬2¯:©:°b¸:±oÓ+FÔGÜ˜Ÿ™ B¨Ó+¨ZÔ8Ü˜Ÿ™ B¨Ó+¬R¯Z©Z¸¸J¹Ó-GÔHä˜Ÿ™ C¨Ó-ÜŸ
™
¡1 S£6©A¨c«F¡?Ó3ô	5ä˜Ÿ™ C¨Ó+ÜŸ
™
¡1 Q£4©!¨A«$¡;±°1³Ñ#5¹¸#»Ñ#>Ó?ô	Aä˜Ÿ™ H¨fÓ5ÜŸ
™
¡1 Q£4©!¨A«$¡;±°1³Ñ#5¹¸#»Ñ#>Ó?ô	Aä˜Ÿ™ C¨Ó0ÜŸ
™
¡1 Q£4©!¨A«$¡;±°1³Ñ#5¹¸#»Ñ#>ÀÀZÁÑ#OÓPô	Rô 	˜Ÿ™ A rÓ*¬B¯J©J±q¸³t¹aÀ»d±{Ó,CÔDÜ˜Ÿ™ B¨Ó,¬b¯j©j¹¸1»ÁÀ!Ã¹Ó.EÔFÜ˜Ÿ™ A rÓ*ÜŸ
™
¡1 Q£4©!¨A«$¡;°°Z±Ñ#?Ó@õ	Brf   c                 óÈ   — g d¢}t        ||«      }d|_        t        j                  |«      }dD ]1  \  }}t	        |j                  ||«      |j                  ||«      «       Œ3 y )Nr5   r»   ))éûÿÿÿr¼   )r¼   r˜   )rò   é   )r
   rr   r	   rÀ   r   rõ   )rM   rm   rO   ÚprÎ   rÏ   s         rP   Útest_integrate_ppolyz TestBSpline.test_integrate_ppolyŠ  s`   € âˆÜ˜q !Ó$ˆØ"ˆŒÜ×Ñ˜aÓ ˆà5ò 	1‰FˆB�Ü˜AŸK™K¨¨BÓ/ØŸK™K¨¨BÓ/õ1ñ	1rf   c                 óÂ   — t        j                  g d¢«      }dD ]C  }|j                  dd|¬«      }t        |t        j
                  «      sJ ‚|j                  dk(  rŒCJ ‚ y )Nr3   r¥   r   r)   rq   )r   rÔ   rõ   Ú
isinstancerF   ÚndarrayÚndim)rM   rO   rr   Úress       rP   Útest_integrate_0D_alwaysz$TestBSpline.test_integrate_0D_always•  sY   € ä×!Ñ!¢)Ó,ˆØ(ò 	!ˆKØ—+‘+˜a °�+Ó<ˆCÜ˜c¤2§:¡:Ô.Ð.Ð.Ø—8‘8˜q“=Ð �=ñ	!rf   c                 óæ   —  G d„ dt         «      }|j                  g d¢«      }|j                  |k(  sJ ‚|j                  «       j                  |k(  sJ ‚|j	                  «       j                  |k(  sJ ‚y )Nc                   ó   — e Zd Zy)ú'TestBSpline.test_subclassing.<locals>.BN)Ú__name__Ú
__module__Ú__qualname__© rf   rP   ÚBr  Ÿ  s   „ Ørf   r  )r   r)   r4   r4   )r   rÔ   Ú	__class__rç   rì   )rM   r  rO   s      rP   Útest_subclassingzTestBSpline.test_subclassing�  sg   € ô	”ô 	ð �O‰OšLÓ)ˆØ�{‰{˜aÒÐÐØ�|‰|‹~×'Ñ'¨1Ò,Ð,Ð,Ø×ÑÓ!×+Ñ+¨qÒ0Ð0Ñ0rf   Úaxisrò   r7   c                 ó   — d\  }}t        j                  dd||z   dz   «      }g d¢}|dz  }|j                  ||«       t        |«      }t         j                  j                  d«      }|j	                  |¬«      }t        ||||¬«      }	|	j                  j                  ||   f|d | z   ||dz   d  z   k(  sJ ‚|j	                  d	«      }
 |	|
«      j                  |d | |
j                  z   ||dz   d  z   k(  sJ ‚|j                   dz
  |j                  fD ]$  }t        t        t        fi t        ||||¬
«      ¤Ž Œ& t        ||||¬«      j                  «       t        ||||¬«      j                  d«      t        ||||¬«      j                  «       t        ||||¬«      j                  d«      fD ]  }|j                  |	j                  k(  rŒJ ‚ y )Nr‘   r   r)   ©r“   r”   rº   r7   r…   r•   ©r  r—   )r-   r.   r/   r  r4   )rF   r`   r   ÚtuplerL   rˆ   r   r.   r™   r  rB   r    rE   rç   rì   r  )rM   r  rN   r/   r-   ÚshÚpos_axisrŠ   r.   rO   ÚxpÚaxÚb1s                rP   Ú	test_axiszTestBSpline.test_axis§  sÇ  € à‰ˆˆ1Ü�K‰K˜˜1˜a !™e a™iÓ(ˆÚˆð ˜!‘8ˆØ
�	‰	�(˜AÔÜ�2‹YˆÜ�i‰i×#Ñ# DÓ)ˆØ�J‰J˜BˆJÓˆÜ�A�q˜! $Ô'ˆØ�s‰s�y‰y˜R ™\˜O¨b°°(¨mÑ;¸bÀÈ!ÁÀ¸oÑMÒMÐMÐMà�Z‰Z˜	Ó"ˆÙ�‹u�{‰{˜b  (˜m¨b¯h©hÑ6¸¸HÀQ¹J¸K¸ÑHÒHÐHÐHð —F‘F�7˜Q‘; §¡Ð'ò 	:ˆBÜœ)¤Wñ :Ü  1¨¨Q°RÔ8ó:ð	:ô
 ˜1˜a ¨Ô.×9Ñ9Ó;Ü˜1˜a ¨Ô.×9Ñ9¸!Ó<Ü˜1˜a ¨Ô.×=Ñ=Ó?Ü˜1˜a ¨Ô.×=Ñ=¸aÓ@ðBò 	%ˆBð —7‘7˜aŸf™fÓ$Ð$Ð$ñ		%rf   c                 óä   — d}g d¢}t        j                  g d¢g d¢g«      }t        |||d¬«      }t        ||d   |«      }t        ||d   |«      }t         |d	«       |d	«       |d	«      g«       y )
Nr4   )r   r)   r4   r6   r7   r˜   r“   )r2   r4   r   r2   )r4   r   éýÿÿÿr)   r2   r  r   r)   r=   )rF   Úarrayr   r   )rM   r/   r-   r.   ÚsplÚspl0Úspl1s          rP   Útest_neg_axiszTestBSpline.test_neg_axisÅ  sn   € ØˆÚ!ˆÜ�H‰H’n¢mÐ4Ó5ˆä�a˜˜A BÔ'ˆÜ�q˜!˜A™$ Ó"ˆÜ�q˜!˜A™$ Ó"ˆÜ™˜C›¡4¨£9©d°3«iÐ"8Õ9rf   c                 ó¦   — d„ }d}d}dD ]  } ||||«       Œ t        ddd«      D ]  } |||d«       Œ d}t        dd	«      D ]  } |||d
«       Œ y)a7  
        Splines with different boundary conditions are built on different
        types of vectors of knots. As far as design matrix depends only on
        vector of knots, `k` and `x` it is useful to make tests for different
        boundary conditions (and as following different vectors of knots).
        c                 óB  — t         j                  j                  d«      }t        j                  |j	                  | «      dz  dz
  «      }|j	                  | «      dz  dz
  }|dk(  r|d   |d<   t        ||||¬«      }t        j                  t        |j                  «      |z
  dz
  «      } t        |j                  ||«      |«      }t        j                  ||j                  |«      j                  «       }	t        |	|j                  z  |d	¬
«       t        ||	d	¬
«       y)zY
            To avoid repetition of code the following function is provided.
            r…   é(   r†   r»   r2   r   ©r/   Úbc_typer)   rj   rk   N)rF   rL   rˆ   r‰   Úrandom_sampler
   ÚeyeÚlenr-   r   Údesign_matrixÚtoarrayr   r.   )
rN   r/   r%  rŠ   rm   r‹   rv   r.   Údes_matr_defÚdes_matr_csrs
             rP   Úrun_design_matrix_testszHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_tests×  sû   € ô —)‘)×'Ñ'¨Ó-ˆCÜ—‘˜×)Ñ)¨!Ó,¨rÑ1°BÑ6Ó7ˆAØ×!Ñ! !Ó$ rÑ)¨BÑ.ˆAØ˜*Ò$Ø˜‘u��!‘ä% a¨¨a¸ÔAˆDä—‘”s˜4Ÿ6™6“{ Q‘¨Ñ*Ó+ˆAØ0œ7 4§6¡6¨1¨aÓ0°Ó3ˆLÜ"×0Ñ0°Ø15·±Ø12ó4ç4;±G³Ið ô ˜L¨4¯6©6Ñ1°1¸5ÕAÜ˜L¨,¸UÖCrf   r?   r6   ©ÚclampedÚnaturalrº   r4   ú
not-a-knotr˜   r”   r»   N)rÈ   )rM   r-  rN   r/   Úbcs        rP   Útest_design_matrix_bc_typesz'TestBSpline.test_design_matrix_bc_typesÏ  s|   € ò	Dð* ˆØˆØ(ò 	.ˆBÙ# A q¨"Õ-ð	.ô �q˜!˜Q“ò 	8ˆAÙ# A q¨,Õ7ð	8ð ˆÜ�q˜!“ò 	6ˆAÙ# A q¨*Õ5ñ	6rf   rr   )FTr»   Údegreer˜   c           	      ó®  — t         j                  j                  d«      }|j                  d|dz   z  «      }t        j                  |«      t        j
                  |«      }}|}t         j                  t        j                  |dz
  |dz
  |«      t        j                  ||d|dz   z  «      t        j                  |dz   |dz   |«      f   }t        j                  t        |«      |z
  dz
  «      }	t        ||	||«      }
t         |
|«      t        j                  ||||«      j                  «       «       t        j                  |dz
  |dz
  |dz   |dz   g«      }|s;t        j                   t"        «      5  t        j                  ||||«       ddd«       yt         |
|«      t        j                  ||||«      j                  «       «       y# 1 sw Y   yxY w)z;Test that design_matrix(x) is equivalent to BSpline(..)(x).r…   r^   r)   r4   ró   N)rF   rL   rˆ   r&  ÚaminÚamaxrŸ   r`   r'  r(  r   r   r)  r*  r  rZ   r   rD   )rM   rr   r4  rŠ   rm   ÚxminÚxmaxr/   r-   r.   Úbsplines              rP   Ú'test_design_matrix_same_as_BSpline_callz3TestBSpline.test_design_matrix_same_as_BSpline_callú  s•  € ô �i‰i×#Ñ# DÓ)ˆØ×Ñ˜b F¨Q¡JÑ/Ó0ˆÜ—W‘W˜Q“Z¤§¡¨£ˆdˆØˆÜ�E‰E”"—+‘+˜d Q™h¨¨q©°&Ó9Ü—+‘+˜d D¨!¨v¸©zÑ*:Ó;Ü—+‘+˜d Q™h¨¨q©°&Ó9ð:ñ ;ˆô �F‰F”3�q“6˜A‘: ‘>Ó"ˆÜ˜!˜Q  ;Ó/ˆÜÙ�A‹Jœ×-Ñ-¨a°°A°{ÓC×KÑKÓMô	
ô
 �H‰H�d˜R‘i ¨¡¨4°#©:°t¸b±yÐAÓBˆÙÜ—‘œzÓ*ñ <Ü×%Ñ% a¨¨A¨{Ô;÷<ð <ô Ù˜“
Ü×%Ñ% a¨¨A¨{Ó;×CÑCÓEõ÷<ð <ús   Å2GÇGc                 ó²  — t         j                  j                  d«      }d}d}t        j                  |j	                  |«      dz  dz
  «      }|j	                  |«      dz  dz
  }t        |||¬«      }t        dd«      D ]V  }|d | }|d | }	t        j                  ||j                  |«      j                  «       }
t        |
|j                  z  |	d	¬
«       ŒX y )Nr…   r^   r6   r#  r†   rå   r)   r7   rj   rk   )rF   rL   rˆ   r‰   r&  r
   rÈ   r   r)  r-   r*  r   r.   )rM   rŠ   rN   r/   rm   r‹   rv   r÷   ÚxcÚycr,  s              rP   Útest_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapes  sÕ   € ä�i‰i×#Ñ# DÓ)ˆØˆØˆÜ�G‰G�C×%Ñ% aÓ(¨2Ñ-°Ñ2Ó3ˆØ×Ñ˜aÓ  2Ñ%¨Ñ*ˆä! ! Q¨!Ô,ˆÜ�q˜!“ò 	CˆAØ�2�A�ˆBØ�2�A�ˆBÜ"×0Ñ0°Ø15·±Ø12ó4ç4;±G³Ið ô ˜L¨4¯6©6Ñ1°2¸EÖBñ	Crf   c                 óx   — g d¢}t        j                  d|d«      j                  «       }t        |g d¢gd¬«       y )N)r+   r+   r+   r9   r:   r;   r;   r;   r9   r6   )g      Ð?gm‰à¨ªªâ?gKÚ}\UUÅ?r8   rj   rk   )r   r)  r*  r   )rM   r-   Údes_matrs      rP   Útest_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapes'  s7   € â,ˆÜ×(Ñ(¨¨Q°Ó2×:Ñ:Ó<ˆÜ˜Ú;Ð<Ø"ö	$rf   c                 ó  — t         j                  j                  d«      }d}d}t        j                  |j	                  |«      dz  dz
  «      }|j	                  |«      dz  dz
  }t        |||¬«      }t        t        «      5  t        j                  ||j                  d d d…   |«       d d d «       d}g d	¢}g d
¢}t        t        «      5  t        j                  |||«       d d d «       y # 1 sw Y   ŒCxY w# 1 sw Y   y xY w)Nr…   r^   r6   r#  r†   rå   r2   r4   )r8   r+   r9   r:   r;   ç      @rp   )rF   rL   rˆ   r‰   r&  r
   rB   rD   r   r)  r-   )rM   rŠ   rN   r/   rm   r‹   rv   r-   s           rP   Útest_design_matrix_assertsz&TestBSpline.test_design_matrix_asserts/  së   € Ü�i‰i×#Ñ# DÓ)ˆØˆØˆÜ�G‰G�C×%Ñ% aÓ(¨2Ñ-°Ñ2Ó3ˆØ×Ñ˜aÓ  2Ñ%¨Ñ*ˆÜ! ! Q¨!Ô,ˆô œ:Ó&ñ 	6Ü×!Ñ! ! T§V¡V©D¨b¨D¡\°1Ô5÷	6àˆÚ$ˆÚˆäœ:Ó&ñ 	+Ü×!Ñ! ! Q¨Ô*÷	+ð 	+÷	6ð 	6ú÷	+ð 	+ús   Â(C,ÃC8Ã,C5Ã8Dr%  )r0  r/  r»   r1  c                 óÒ  — t         j                  j                  d«      }t        j                  |j                  d«      «      }|j                  d«      }|dk(  r|d   |d<   t	        |||¬«      }t        j                  ||¬«      }t        j                  ddd«      }t         ||«       ||«      d¬	«       t        |||¬«      }t        |j                  |j                  d¬	«       y )
Nr…   r†   r»   r   r2   ©r%  r)   rS   rk   )rF   rL   rˆ   r‰   r   r   Úfrom_power_basisr`   r   r
   r.   )	rM   r%  rŠ   rm   r‹   Úcbrv   rd   Úbspl_news	            rP   Útest_from_power_basisz!TestBSpline.test_from_power_basisA  s¸   € ô �i‰i×#Ñ# DÓ)ˆÜ�G‰G�C—J‘J˜r“NÓ#ˆØ�J‰J�r‹NˆØ�jÒ Ø�a‘DˆAˆb‰EÜ˜˜A wÔ/ˆÜ×'Ñ'¨°GÔ<ˆÜ�[‰[˜˜A˜rÓ"ˆÜ™˜2›¡ R£¨uÕ5Ü% a¨°GÔ<ˆÜ˜Ÿ™ §
¡
°Ö7rf   c                 óþ  — t         j                  j                  d«      }t        j                  |j                  d«      «      }|j                  d«      |j                  d«      dz  z   }|dk(  r|d   |d<   t	        |||¬«      }t        j                  ||¬«      }t        ||j                  |¬«      }t        ||j                  |¬«      }t        |j                  |j                  d|j                  z  z   d¬	«       y )
Nr…   r†   r*   r»   r   r2   rG  rS   rk   )rF   rL   rˆ   r‰   r   r   rH  r
   rÛ   rÜ   r   r.   )	rM   r%  rŠ   rm   r‹   rI  rv   Úbspl_new_realÚbspl_new_imags	            rP   Útest_from_power_basis_complexz)TestBSpline.test_from_power_basis_complexP  sÈ   € ô �i‰i×#Ñ# DÓ)ˆÜ�G‰G�C—J‘J˜r“NÓ#ˆØ�J‰J�r‹N˜SŸZ™Z¨›^¨bÑ0Ñ0ˆØ�jÒ Ø�a‘DˆAˆb‰EÜ˜˜A wÔ/ˆÜ×'Ñ'¨°GÔ<ˆÜ*¨1¨a¯f©f¸gÔFˆÜ*¨1¨a¯f©f¸gÔFˆÜ˜Ÿ™ §¡°"°}·±Ñ2FÑ FÈUÖSrf   c                 óÚ   — t        j                  g d¢«      }t        j                  g d¢«      }t        j                  t	        ||d¬«      d¬«      }t        |j                  g d¢d¬«       y)	a}  
        For x = [0, 1, 2, 3, 4] and y = [1, 1, 1, 1, 1]
        the coefficients of Cubic Spline in the power basis:

        $[[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[1, 1, 1, 1, 1]]$

        It could be shown explicitly that coefficients of the interpolating
        function in B-spline basis are c = [1, 1, 1, 1, 1, 1, 1]
        r5   )r)   r)   r)   r)   r)   r0  rG  )r+   r)   r)   r)   r)   r)   r)   rS   rk   N)rF   r  r   rH  r   r   r.   )rM   rm   r‹   rv   s       rP   Útest_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmp^  sO   € ô �H‰H’_Ó%ˆÜ�H‰H’_Ó%ˆÜ×'Ñ'¬°A°qÀ)Ô(LØ09ô;ˆä˜Ÿ™Ò 7¸eÖDrf   c                 ód  — t        j                  ddg«      }t        j                  dg«      }|j                  d¬«       |j                  d¬«       t        j                  ddd«      }|j                  d¬«       t	        ||d¬«      }t         ||«      t        j                  |«      dz  «       y )Nr   r)   r:   F©Úwriter^   r,   )rF   r  Úsetflagsr`   r   r   ra   )rM   r-   r.   rd   rO   s        rP   Útest_read_onlyzTestBSpline.test_read_onlyq  s‰   € ä�H‰H�a˜�VÓˆÜ�H‰H�c�U‹OˆØ	�
‰
˜ˆ
ÔØ	�
‰
˜ˆ
Ôä�[‰[˜˜A˜rÓ"ˆØ
�‰˜%ˆÔ ä�a˜1 Ô"ˆÜ™˜"›œrŸ|™|¨BÓ/°#Ñ5Õ6rf   c                 ó8   — t        «       }d„ }t        d||«       y )Nc                 óv   — |j                   \  }} }t        j                  ||   || dz
     d«      } ||«       y )Nr)   i'  )rY   rF   r`   )r«   rO   r-   r/   rd   s        rP   Ú	worker_fnz/TestBSpline.test_concurrency.<locals>.worker_fnƒ  s8   € Ø—e‘e‰GˆAˆq�!Ü—‘˜Q˜q™T 1 a R¨¡T¡7¨EÓ2ˆBÙˆb�Erf   r^   )rX   r!   )rM   rO   rY  s      rP   Útest_concurrencyzTestBSpline.test_concurrency~  s   € ô  Ó!ˆò	ô
 	   I¨qÕ1rf   c           	      ón  — t        «       }t        j                  ddd«      } ||«      }t        j                  «       }t        j
                  t        |j                  d|› d�«      «      d|j                  j                  |j                  j                  ¬«      }|j                  |d d  t        j
                  t        |j                  d|› d�«      «      d|j                  j                  |j                  j                  ¬«      }|j                  |d d  ||_        ||_        t         ||«      |«       y )	Nr   r)   r^   r-   z.datzw+)ÚmoderA   r™   r.   )rX   rF   r`   Ú	threadingÚget_native_idÚmemmapÚstrÚjoinr-   rA   r™   r.   r   )rM   ÚtmpdirrO   rd   ÚexpectedÚtidÚt_mmÚc_mms           rP   Útest_memmapzTestBSpline.test_memmap‹  så   € ô  Ó!ˆÜ�[‰[˜˜A˜rÓ"ˆá�R“5ˆä×%Ñ%Ó'ˆÜ�y‰yœ˜VŸ[™[¨1¨S¨E°¨Ó7Ó8¸tØ Ÿs™sŸy™y°·±·	±	ô;ˆà—#‘#ˆ‰QˆÜ�y‰yœ˜VŸ[™[¨1¨S¨E°¨Ó7Ó8¸tØ Ÿs™sŸy™y°·±·	±	ô;ˆà—#‘#ˆ‰QˆØˆŒØˆŒä™˜"›˜xÕ(rf   N)2r  r	  r
  rQ   r\   re   rn   rw   r   rƒ   rŒ   r�   rœ   r£   r­   r¯   r³   r¸   r¾   rÂ   rË   rÐ   rÖ   rÙ   rà   rã   rê   rï   rù   rþ   r  r  rZ   ÚmarkÚparametrizerÈ   r  r   Úthread_unsafer3  r;  r?  rB  rE  rK  rO  rQ  rV  rZ  rg  r  rf   rP   r'   r'   '   sÌ  „ ò!òF
ò>ò	?ò.ò/òAò
;ò1ò.òEò&Wòò-ò(òPò$?òFòGò4AòMò:ò#ò
Fò7ò&BòP	1ò!ò1ð ‡[�[×Ñ˜V¡U¨2¨q£\Ó2ñ%ó 3ð%ò::ð ‡[�[×Ññ(6ó ð(6ðT ‡[�[×Ñ˜]Ò,EÓFØ‡[�[×Ñ˜X¡u¨Q£xÓ0ñó 1ó Gðò4Cò"$ò+ð$ ‡[�[×Ñ˜Yò )Có Dñ8óDð8ð ‡[�[×Ñ˜Yò )Có Dñ
TóDð
TòEò&7ð ‡[�[×Ññ	2ó ð	2ó)rf   r'   c                   ó>  — e Zd Zej                  j                  dg d¢«      d„ «       Zej                  j                  dg d¢«      d„ «       Zd„ Zej                  j                  dg d	¢«      d
„ «       Z	ej                  j                  dddg«      d„ «       Z
d„ Zd„ Zy)Ú
TestInsertÚxval)r8   r+   r=   r7   ç      @ç      @c                 ó4  — t        j                  d«      }t        j                  |«      dz  }t        ||d¬«      }t	        ||«      }|j                  |«      }t        |j                  |j                  d¬«       t        |j                  |j                  d |j                   dz
   d¬«       ||d   k7  r|n|d d }t         j                  |d|dd  |d d z   z  f   }t         ||«       ||«      d¬«       t        j                  |«      dz  }t        ||d¬«      }	t        |t         j                  ||f   d¬«      }
|
j                  |«      }t        |j                  |j                  d¬«       t        |j                  t         j                  |j                  |«      j                  |	j                  |«      j                  f   d¬«       ||d   k7  r|n|d d }t         j                  |d|dd  |d d z   z  f   }t         |
|«       ||«      d¬«       y )	Nrº   r6   rå   rS   rk   r)   r2   r¼   )rF   rJ   Úsinr
   r   Úinsert_knotr   r-   r.   r/   rŸ   Úcosrí   )rM   rm  rm   r‹   r  Úspl_1fÚspl_1rd   Úy1Úspl_y1Úspl_yyÚspl_yy1s               rP   Útest_insertzTestInsert.test_insert¤  sÕ  € ô �I‰I�a‹LˆÜ�F‰F�1‹I�q‰LˆÜ   A¨Ô+ˆä˜˜cÓ"ˆØ—‘ Ó%ˆä˜Ÿ™ §¡°Õ6Ü˜Ÿ™ §¡¨)¨C¯E©E¨6°!©8Ð!4¸5ÕAð ˜!˜B™%’-‰Q Q s¨ VˆÜ�U‰U�2�s˜A˜a˜b˜E A c r F™NÑ+Ð+Ñ,ˆÜ™˜B›¡ r£°Õ7ô �V‰V�A‹Y˜‰\ˆÜ# A r¨QÔ/ˆÜ# A¤r§u¡u¨Q°¨U¡|°qÔ9ˆØ×$Ñ$ TÓ*ˆä˜Ÿ	™	 5§7¡7°Õ7Ü˜Ÿ	™	¤2§5¡5¨¯©¸Ó)>×)@Ñ)@Ø)/×);Ñ);¸DÓ)A×)CÑ)Cð*Dñ $EØKPõ	Rð ˜!˜B™%’-‰Q Q s¨ VˆÜ�U‰U�2�s˜A˜a˜b˜E A c r F™NÑ+Ð+Ñ,ˆÜ™˜r›
¡G¨B£K°eÖ<rf   zxval, m))r8   r4   )r+   r6   )ró   r˜   )r7   r4   )ro  r4   c                 óø  — t        j                  d«      }t        j                  |«      dz  }t        ||d¬«      }t	        |||¬«      }|j                  ||«      }t        |j                  |j                  d¬«       t        |j                  |j                  d |j                   dz
   d¬«       ||d   k7  r|n|d d }t         j                  |d	|dd  |d d z   z  f   }t         ||«       ||«      d¬«       y )
Nrº   r6   rå   ©ÚmrS   rk   r)   r2   r¼   )rF   rJ   rq  r
   r   rr  r   r-   r.   r/   rŸ   )	rM   rm  r}  rm   r‹   r  rt  ru  rd   s	            rP   Útest_insert_multizTestInsert.test_insert_multiÅ  sÚ   € ô �I‰I�a‹LˆÜ�F‰F�1‹I�q‰LˆÜ   A¨Ô+ˆä˜˜c QÔ'ˆØ—‘  aÓ(ˆä˜Ÿ™ §¡°Õ6Ü˜Ÿ™ §¡¨)¨C¯E©E¨6°!©8Ð!4¸5ÕAà˜!˜B™%’-‰Q Q s¨ VˆÜ�U‰U�2�s˜A˜a˜b˜E A c r F™NÑ+Ð+Ñ,ˆÜ™˜B›¡ r£°Ö7rf   c                 ó¾  — t         j                  j                  d«      }d\  }}t        j                  |j	                  ||z   dz   ¬«      «      }|j	                  |ddf¬«      }t        |||«      }|j	                  ||dz      || dz
     ¬«      }|j                  |«      }|j	                  ||dz      || dz
     d¬	«      }	t         ||	«       ||	«      d
¬«       y )Né90  r>   r)   r•   r6   r4   )ÚlowÚhighrž   ©r�  r‚  r–   rS   rk   )rF   rL   Údefault_rngr‰   Úuniformr   rr  r   )
rM   rŠ   rN   r/   r-   r.   r  Úxvru  rd   s
             rP   Útest_insert_randomzTestInsert.test_insert_random×  sÐ   € Ü�i‰i×#Ñ# EÓ*ˆØ‰ˆˆ1ä�G‰G�C—K‘K Q q¡S¨¡U�KÓ+Ó,ˆØ�K‰K˜a  A˜YˆKÓ'ˆÜ�a˜˜AÓˆà�[‰[˜Q˜q ™s™V¨!¨Q¨B¨q©D©'ˆ[Ó2ˆØ—‘ Ó#ˆà�[‰[˜Q˜q ™s™V¨!¨Q¨B¨q©D©'¸ˆ[Ó;ˆÜ™˜B›¡ r£°Ö7rf   r†  )	r   çš™™™™™¹?r9   r;   ç      @ç      @ç      @gffffff@ro  c           	      ó
  — t        j                  d«      }t        j                  |«      dz  }t        ||d¬«      }t	        |ddiŽ}|j                  |«      }t        ||j                  d¬«      \  }}}	t        |j                  |d¬	«       t        |j                  d |	 d
z
   |d |	 d
z
   d¬	«       t         j                  j                  d«      j                  ddd¬«      }
t         ||
«      t        |
|||	f«      d¬	«       y )Nrº   r6   rå   rr   r»   T©ÚperrS   rk   r)   r…   r   r”   é)   rƒ  )rF   rJ   rq  r   r   rr  r   rY   r   r-   r.   rL   r„  r…  r   )rM   r†  rm   r‹   rY   r  ru  ÚtfÚcfr/   rd   s              rP   Útest_insert_periodiczTestInsert.test_insert_periodicå  sà   € ô �I‰I�a‹LˆÜ�F‰F�1‹I�q‰LˆÜ�Q˜˜QÔˆÜ�sÐ3¨
Ñ3ˆà—‘ Ó#ˆÜ˜2˜sŸw™w¨DÔ1‰	ˆˆB�ä˜Ÿ™ ¨%Õ0Ü˜Ÿ™  !  A¡˜¨¨5¨Q¨B¨q©D¨	¸Õ>ä�Y‰Y×"Ñ" 4Ó(×0Ñ0°Q¸QÀRÐ0ÓHˆÜ™˜b›	¤5¨¨b°"°a¨[Ó#9ÀÖFrf   rr   Nr»   c                 óŠ  — t        j                  d«      dz  t         j                  z  }t        j                  |«      t        j                  |«      }}t        ||d|z  z   d¬«      }||_        t        ||d¬«      }||_        t        ||d¬«      }||_        d}|j                  |«      }	|j                  |«      }
|j                  |«      }t        |	j                  |
j                  d¬«       t        |	j                  |j                  d¬«       t        |	j                  |
j                  d|j                  z  z   d¬«       y )	Nrº   r4   r*   r6   rå   ç      @rS   rk   )rF   rJ   Úpirq  rs  r
   rr   rr  r   r-   r.   )rM   rr   rm   Úy_reÚy_imr  Úspl_reÚspl_imr†  ru  Úspl_1reÚspl_1ims               rP   Útest_complexzTestInsert.test_complex÷  sú   € ä�I‰I�a‹L˜‰Nœ2Ÿ5™5Ñ ˆÜ—V‘V˜A“Y¤§¡ q£	ˆdˆä   D¨2¨d©7¡N°aÔ8ˆØ%ˆŒä# A t¨qÔ1ˆØ(ˆÔä# A t¨qÔ1ˆØ(ˆÔàˆØ—‘ Ó#ˆØ×$Ñ$ RÓ(ˆØ×$Ñ$ RÓ(ˆä˜Ÿ™ §¡°Õ7Ü˜Ÿ™ §¡°Õ7Ü˜Ÿ™ §¡¨R°·	±	©\Ñ!9ÀÖFrf   c                 óœ  — d}d}t        j                  dg|dz   z  g d¢z   dg|dz   z  z   «      }t        j                  t        |«      |z
  dz
  «      }t	        |||d¬«      }t        t        «      5  t        ||||fd	¬
«       d d d «       t        t        «      5  |j                  |«       d d d «       y # 1 sw Y   Œ3xY w# 1 sw Y   y xY w)Nr”  r6   r   r)   ©r4   r6   r7   r˜   r”   r»   rq   Tr�  )	rF   r  Úonesr(  r   rB   rD   r   rr  )rM   r†  r/   r-   r.   r  s         rP   Ú+test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knots  sÃ   € ð ˆØˆÜ�H‰H�a�S˜!˜A™#‘Y¢Ñ-°°°Q°q±S±	Ñ9Ó:ˆÜ�G‰G”C˜“F˜Q‘J ‘NÓ#ˆÜ�a˜˜A¨:Ô6ˆäœ:Ó&ñ 	,Ü�2˜˜1˜a�y dÕ+÷	,ô œ:Ó&ñ 	 Ø�O‰O˜BÔ÷	 ð 	 ÷	,ð 	,ú÷	 ð 	 ús   Á2B6ÂCÂ6B?ÃCc                 ó  — d}t        j                  dg|dz   z  g d¢z   dg|dz   z  z   «      }t        j                  t        |«      |z
  dz
  «      }t	        |||«      }t        t        «      5  |j                  d«       d d d «       t        t        «      5  |j                  d«       d d d «       t        t        «      5  |j                  dd¬«       d d d «       y # 1 sw Y   Œ^xY w# 1 sw Y   ŒAxY w# 1 sw Y   y xY w)	Nr6   r   r)   rž  r”   r2   rº   r|  )rF   r  rŸ  r(  r   rB   rD   rr  )rM   r/   r-   r.   r  s        rP   Útest_insert_no_extrapz TestInsert.test_insert_no_extrap"  sã   € ØˆÜ�H‰H�a�S˜!˜A™#‘Y¢Ñ-°°°Q°q±S±	Ñ9Ó:ˆÜ�G‰G”C˜“F˜Q‘J ‘NÓ#ˆÜ�a˜˜AÓˆäœ:Ó&ñ 	 Ø�O‰O˜BÔ÷	 ô œ:Ó&ñ 	Ø�O‰O˜AÔ÷	ô œ:Ó&ñ 	$Ø�O‰O˜A ˆOÔ#÷	$ð 	$÷	 ð 	 ú÷	ð 	ú÷	$ð 	$ús$   Á.CÂC)Ã C5ÃC&Ã)C2Ã5C>)r  r	  r
  rZ   rh  ri  rz  r~  r‡  r’  rœ  r   r¢  r  rf   rP   rl  rl  ¢  s¹   „ à‡[�[×Ñ˜VÒ%AÓBñ=ó Cð=ð@ ‡[�[×ÑØÒCóñ8óð8ò8ð ‡[�[×Ñ˜Tò $8ó ñGóðGð ‡[�[×Ñ˜]¨T°:Ð,>Ó?ñGó @ðGò, ó($rf   rl  c            
      ó¼   — dd„} dD ]S  }t        |¬«      }t        t        |«      «      D ].  \  }} | ||«       t        d|dz   «      D ]  } | |||dd«       Œ Œ0 ŒU y )Nc           
      ó  — | j                   \  }}}t        j                  |«      }t        j                  |d   dz
  d|dd  |d d z   z  |d   dz   f   }t	        t        ||||f|«       | ||«      ||d|› d| j                  › �¬«       y )	Nr   rˆ  r¼   r)   r2   zder = z  k = )rU   rV   Úerr_msg)rY   rF   ÚuniquerŸ   r   r   r/   )	rO   ré   rÅ   rU   rV   r-   r.   r/   rm   s	            rP   Úcheck_splevz,test_knots_multiplicity.<locals>.check_splev6  s’   € à—%‘%‰ˆˆ1ˆaÜ�I‰I�a‹LˆÜ�E‰E�!�A‘$�s‘(˜C  1 2 ¨¨2¨A¨¡Ñ/°°2±°s±Ð:Ñ;ˆÜœ˜a ! Q¨ ¨CÓ0±!°A°s³)Ø °°s°e¸6À!Ç#Á#ÀÐ.Gö	Irf   ©r)   r4   r6   r7   r˜   rå   r)   ræ   )r   rj   rj   )rX   Ú	enumerateÚ_make_multiplesrÈ   )r§  r/   rO   ré   r  rÅ   s         rP   Útest_knots_multiplicityr«  2  ss   € óIð ò 6ˆÜ !Ô$ˆÜœ¨qÓ1Ó2ò 	6‰EˆAˆrÙ˜˜AÔÜ˜Q  !¡“}ò 6�Ù˜B  3¨¨uÕ5ñ6ñ	6ñ6rf   c                 ób  — |dk(  r||   | cxk  r||dz      k  rdS  dS |||z      ||   k(  rd}n)| ||   z
  |||z      ||   z
  z  t        | |dz
  ||«      z  }|||z   dz      ||dz      k(  rd}||z   S |||z   dz      | z
  |||z   dz      ||dz      z
  z  t        | |dz
  |dz   |«      z  }||z   S )zw
    Naive way to compute B-spline basis functions. Useful only for testing!
    computes B(x; t[i],..., t[i+k+1])
    r   r)   r+   r8   ©Ú_naive_B©rm   r/   r÷   r-   Úc1Úc2s         rP   r®  r®  I  s  € ð
 	ˆA‚vØ˜‘d˜aÔ( ! A a¡C¡&Ò(ˆsÐ1Ð(¨cÐ1Øˆˆ1‰�v��1‘‚~Ø‰à�!�A‘$‰h˜˜1˜Q™3™ ! A¡$™Ñ'¬(°1°a¸±c¸1¸aÓ*@Ñ@ˆØˆˆ1‰ˆQ‰�x�1�Q�q‘S‘6ÒØˆð �‰GÐð ��!‘�A‘‰h˜‰l˜Q˜q ™s 1™u™X¨¨!¨A©#©Ñ.Ñ/´(¸1¸aÀ¹cÀ1ÀQÁ3ÈÓ2JÑJˆØ�‰GÐrf   c                 ó   ‡ ‡‡‡‡— ‰ ‰‰   k(  r‰Šnt        j                  ‰‰ «      dz
  Š‰‰   ‰ cxk  r‰‰dz      k  sJ ‚ J ‚‰‰k\  r‰t        ‰«      ‰z
  k  sJ ‚t        ˆˆˆˆˆ fd„t	        d‰dz   «      D «       «      S )z=
    Naive B-spline evaluation. Useful only for testing!
    r)   c              3   óR   •K  — | ]  }‰‰|z
     t        ‰‰‰|z
  ‰«      z  –— Œ  y ­w©Nr­  )Ú.0ré   r.   r÷   r/   r-   rm   s     €€€€€rP   ú	<genexpr>z_naive_eval.<locals>.<genexpr>f  s-   øè ø€ ÒF°1ˆq��1‘‰vœ  A q¨¡s¨AÓ.Õ.ÑFùs   ƒ$'r   )rF   Úsearchsortedr(  ÚsumrÈ   )rm   r-   r.   r/   r÷   s   ````@rP   rz   rz   \  s…   ü€ ð 	ˆAˆa‰D‚yØ‰ä�O‰O˜A˜qÓ! AÑ%ˆØˆQ‰4�1Ô˜˜!˜A™#™ÒÐÑÐÐØ�Š6�aœ#˜a›& 1™*’nÐ$Ð$Ü×F¼¸aÀÀ1Á»ÔFÓFÐFrf   c                 óÌ   ‡ ‡‡‡— t        ‰«      ‰dz   z
  }|‰dz   k\  sJ ‚t        ‰«      |k\  sJ ‚‰‰   ‰ cxk  r	‰|   k  sJ ‚ J ‚t        ˆˆˆˆ fd„t        |«      D «       «      S )z'Naive B-spline evaluation, another way.r)   c              3   óF   •K  — | ]  }‰|   t        ‰‰|‰«      z  –— Œ y ­wr´  r­  ©rµ  r÷   r.   r/   r-   rm   s     €€€€rP   r¶  z _naive_eval_2.<locals>.<genexpr>o  s%   øè ø€ Ò=¨qˆq�‰t”h˜q ! Q¨Ó*Õ*Ñ=ùó   ƒ!©r(  r¸  rÈ   ©rm   r-   r.   r/   rN   s   ```` rP   r{   r{   i  si   û€ äˆA‹�!�A‘#‰€AØ��!‘Š8€Oˆ8Üˆq‹6�QŠ;Ðˆ;ØˆQ‰4�1Ô˜˜!™ÒÐÑÐÐÜÖ=´E¸!³HÔ=Ó=Ð=rf   c                 ó  — t        |«      |dz   z
  }||dz   k\  sJ ‚t        |«      |k\  sJ ‚d}t        |«      D ]F  } t        j                  ||||z   dz    d¬«      | «      }|||   t	        j
                  |«      z  z  }ŒH |S )Nr)   r8   r4   Frq   )r(  rÈ   r   rÔ   rF   Ú
nan_to_num)rm   r-   r.   r/   rN   Úsr÷   rO   s           rP   rØ   rØ   r  s”   € ÜˆA‹�!�A‘#‰€AØ��!‘Š8€Oˆ8Üˆq‹6�QŠ;Ðˆ;Ø
€AÜ�1‹Xò %ˆØ@ŒG×!Ñ! ! A a¨¡c¨!¡e *¸%Ô@ÀÓCˆØ	ˆQˆq‰T”B—M‘M !Ó$Ñ$Ñ$‰ð%ð €Hrf   c                 ó¢   — t        j                  | «      } t        j                  | | dk  | dkD  z  | dk\  | dk  z  | dk\  | dk  z  gd„ d„ d„ g«      S )z+ A linear B-spline function B(x | 0, 1, 2).r   r4   r)   c                  ó   — y)Nr8   r  ©rm   s    rP   ú<lambda>zB_012.<locals>.<lambda>ƒ  ó   � rf   c                 ó   — | S r´  r  rÄ  s    rP   rÅ  zB_012.<locals>.<lambda>ƒ  s   € °A€ rf   c                 ó   — d| z
  S ©Nr9   r  rÄ  s    rP   rÅ  zB_012.<locals>.<lambda>ƒ  s
   € ÀÀAÁ€ rf   )rF   Ú
atleast_1dÚ	piecewiserÄ  s    rP   rl   rl   }  se   € ä
�‰�aÓ€AÜ�<‰<˜˜Q ™U q¨1¡uÑ-Ø !™V¨¨A©Ñ.Ø !™V¨¨Q©Ñ/ð1ñ )©+±~ÐFóHð Hrf   c                 óÚ   — t        j                  | «      } | dk  | dkD  | dk  z  | dkD  g}|dk(  r	d„ d„ d„ g}n|dk(  r	d„ d„ d	„ g}nt        d
|› �«      ‚t        j                  | ||«      }|S )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r)   r4   r   c                 ó   — | | z  dz  S rÉ  r  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>‹  s   € ˜1˜Q™3˜r™6€ rf   c                 ó   — d| dz
  dz  z
  S )Ng      è?ró   r4   r  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>Œ  s   € ˜4 1 T¡6¨A¡+Ñ-€ rf   c                 ó   — d| z
  dz  dz  S )Nr:   r4   r  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>�  s   € ˜B˜q™D 1™9 q™=€ rf   c                  ó   — y©Nr+   r  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>�  rÆ  rf   c                  ó   — y)Ng       Àr  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>�  rÆ  rf   c                  ó   — yrÑ  r  rÄ  s    rP   rÅ  zB_0123.<locals>.<lambda>‘  rÆ  rf   znever be here: der=)rF   rÊ  rD   rË  )rm   rÅ   ÚcondsÚfuncsÚpiecess        rP   rÕ   rÕ   †  s�   € ä
�‰�aÓ€AØ�‰U�Q˜‘U˜q 1™uÑ% q¨1¡uÐ-€EØ
ˆa‚xÙ!Ù-Ù(ð*‰ð 
�ŠÙÙÙð‰ô Ð.¨s¨eÐ4Ó5Ð5Ü�\‰\˜!˜U EÓ*€FØ€Mrf   c                 óä   — t         j                  j                  d«      }t        j                  |j                  | |z   dz   «      «      }|j                  | «      }t	        j
                  |||«      S )Né{   r)   )rF   rL   rˆ   r‰   r   Úconstruct_fast)rN   r/   rŠ   r-   r.   s        rP   rX   rX   ˜  sW   € Ü
�)‰)×
Ñ
 Ó
$€CÜ
�‰�—
‘
˜1˜Q™3˜q™5Ó!Ó"€AØ�
‰
�1‹€AÜ×!Ñ! ! Q¨Ó*Ð*rf   c              #   ó€  K  — | j                   | j                  }}| j                  j                  «       }|d   |dd |d   |d<   t	        |||«      –— | j                  j                  «       }|d   |d|dz    t	        |||«      –— | j                  j                  «       }|d   || dz
  d t	        |||«      –— y­w)	zIncrease knot multiplicity.é   é   é   r’   r   Nr)   r2   )r.   r/   r-   Úcopyr   )rO   r.   r/   Út1s       rP   rª  rª  Ÿ  sµ   è ø€ à�3‰3�—‘€q€Aà	
�‰�‰‹€BØ�2‘€B€rˆ"€IØ�‰V€B€r�FÜ
�"�a˜Ó
Òà	
�‰�‰‹€BØ�!‰u€B€tˆˆ!‰€HÜ
�"�a˜Ó
Òà	
�‰�‰‹€BØ�2‘€Bˆ€rˆ!�t€u€IÜ
�"�a˜Ó
Óùs   ‚B<B>c                   óN   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚTestInteropc                 ól  — t        j                  ddt         j                  z  d«      }t        j                  |«      }t	        ||«      }|j
                  |j                  |j                  f| _        |||c| _	        | _
        | _        t        j                  ddt         j                  z  d«      | _        t         j                  |j                  |j                  |j                  f   }t        j                  ||f«      | _        t!        |j
                  | j                  |j                  «      | _        y )Nr   r;   r�  rÝ  )rF   r`   r•  rs  r
   r-   r.   r/   rY   rd   r·   rO   Úxnewrí   rî   r±  r   Úb2)rM   rd   r·   rO   r±  s        rP   Úsetup_methodzTestInterop.setup_methodµ  sÐ   € Ü�[‰[˜˜BœrŸu™u™H bÓ)ˆÜ�V‰V�B‹ZˆÜ˜r 2Ó&ˆØ—C‘C˜Ÿ™˜aŸc™c�?ˆŒØ#% r¨1Ð ˆŒ�”˜$œ&ä—K‘K  2¤b§e¡e¡8¨RÓ0ˆŒ	ä�U‰U�1—3‘3˜Ÿ™˜QŸS™S�=Ñ!ˆÜ—)‘)˜R ˜HÓ%ˆŒÜ˜!Ÿ#™#˜tŸw™w¨¯©Ó,ˆ�rf   c                 ó  — | j                   | j                  | j                  }}}t        t	        ||«       ||«      dd¬«       t        t	        ||j
                  «       ||«      dd¬«       t        t        j                  |D �cg c]  }t	        ||«      ‘Œ c}«       ||«      dd¬«       t        t        d¬«      5  t	        ||«       d d d «       t        t        d|j                  j                  «      «      dz   }|j                  j                  |«      }|j                  ||j                   f}t        t        j                  t	        ||«      «       ||«      j                  |«      dd¬«       y c c}w # 1 sw Y   Œ°xY w)NrS   rT   zCalling splev.. with BSpline©Úmatchr)   ©r   )rã  rO   rä  r   r   rY   rF   rs   rB   rD   r  rÈ   r.   r  Ú	transposer-   r/   )rM   rã  rO   rä  rm   r  rÝ   rY   s           rP   Ú
test_splevzTestInterop.test_splevÂ  s.  € Ø—i‘i §¡¨¯©�ˆaˆô 	œ˜d A›Ù˜$› e°%õ	9äœ˜d A§E¡EÓ*Ù˜$› e°%õ	9äœŸ
™
¸Ö#>°A¤E¨!¨Q¥KÒ#>Ó?Ù˜$› e°%õ	9ô
 œ:Ð-KÔLñ 	Ü�$˜ŒO÷	ô ”5˜˜BŸD™DŸI™IÓ&Ó'¨$Ñ.ˆØ�T‰T�^‰^˜BÓˆØ�t‰t�R˜Ÿ™ÐˆÜœŸ
™
¤5¨¨sÓ#3Ó4Ù˜4›×*Ñ*¨2Ó.°UÀö	Hùò $?÷
	ð 	ús   ÂE5Â>E:Å:Fc                 óÂ  — | j                   | j                  }}t        ||«      }t        j                  ||«      \  }}}t	        |d   |d¬«       t	        |d   |d¬«       |d   |k(  sJ ‚t        ||d¬«      \  }}}}t	        |d   |d¬«       t	        |d   |d¬«       |d   |k(  sJ ‚t        ||«      }	t	        ||	d¬«       t        |Ž }
t	        | |
|«      d¬«       y )Nr   rS   rk   r)   r4   T)Úfull_output)rd   r·   r   rö   r   r   r   )rM   rm   r‹   rY   r-   r.   r/   Útck_fr«   r·   rO   s              rP   Útest_splrepzTestInterop.test_splrepÝ  sà   € Ø�w‰w˜Ÿ™ˆ1ˆä�Q˜‹lˆÜ—,‘,˜q !Ó$‰ˆˆ1ˆaÜ˜˜A™ ¨Õ.Ü˜˜A™ ¨Õ.Ø�1‰v˜Š{Ðˆ{ô    1°$Ô7‰ˆˆq�!�QÜ˜˜a™ !¨%Õ0Ü˜˜a™ !¨%Õ0Ø�Q‰x˜1Š}Ðˆ}ô �1�c‹]ˆÜ˜˜2 EÕ*ô �SˆMˆÜ˜™1˜Q›4 eÖ,rf   c                 ó&  — | j                   | j                  }}t        j                  ||f   }t	        t
        «      5  t        ||«       d d d «       t	        t
        «      5  t        j                  ||«       d d d «       t	        t        d¬«      5  t        |d d |d d «       d d d «       t	        t        d¬«      5  t        j                  |d d |d d «       d d d «       y # 1 sw Y   ŒšxY w# 1 sw Y   ŒxxY w# 1 sw Y   ŒXxY w# 1 sw Y   y xY w)Núm > k must holdrç  r6   )	rd   r·   rF   rí   rB   rD   r   rö   rC   )rM   rm   r‹   Úy2s       rP   Útest_splrep_errorszTestInterop.test_splrep_errorsõ  sî   € ð �w‰w˜Ÿ™ˆ1ˆÜ�U‰U�1�a�4‰[ˆÜœ:Ó&ñ 	Ü�1�bŒM÷	äœ:Ó&ñ 	 Ü�L‰L˜˜BÔ÷	 ô œ9Ð,=Ô>ñ 	!Ü�1�R�a�5˜!˜B˜Q˜%Ô ÷	!äœ9Ð,=Ô>ñ 	'Ü�L‰L˜˜2˜A˜  " 1 Ô&÷	'ð 	'÷	ð 	ú÷	 ð 	 ú÷	!ð 	!ú÷	'ð 	'ús/   ½C#Á!C/ÂC;Â=DÃ#C,Ã/C8Ã;DÄDc                 ó  — t        j                  dt         j                  ¬«      j                  d«      }t	        |«      \  }}t        j                  |«      \  }}t        ||d¬«       t        t        j                  t        ||«      «      |d¬«       t        t        j                  t        ||«      «      |d¬«       t	        |dd¬«      \  \  }}}}}t        ||d¬«       t        t        j                  t        ||«      «      |d¬«       y )	Nrô   r@   ©r6   r˜   rS   rk   r   T)rÁ  rí  )	rF   rJ   rK   rt   r   rö   r   rs   r   )	rM   rm   rO   ÚurY   Úu1Úb_fÚu_fr«   s	            rP   Útest_splprepzTestInterop.test_splprep  sÈ   € Ü�I‰I�b¤§
¡
Ô+×3Ñ3°FÓ;ˆÜ�q‹z‰ˆˆ1Ü—-‘- Ó"‰ˆˆRô 	˜˜2 EÕ*ÜœŸ
™
¤5¨¨A£;Ó/°¸Õ?ÜœŸ
™
¤5¨¨C£=Ó1°1¸5ÕAô & a¨1¸$Ô?Ñ‰
ˆˆc�A�q˜!Ü˜˜3 UÕ+ÜœŸ
™
¤5¨¨c£?Ó3°Q¸UÖCrf   c                 óŒ  — t        j                  d«      j                  d«      }t        t        d¬«      5  t        |«       d d d «       t        t        d¬«      5  t        j
                  |«       d d d «       t        j                  ddd¬«      }t        t        d	¬«      5  t        |g«       d d d «       t        t        d	¬«      5  t        j
                  |g«       d d d «       g d
¢}t        t        d¬«      5  t        |g«       d d d «       t        t        d¬«      5  t        j
                  |g«       d d d «       g d¢}g d¢}t        t        d¬«      5  t        |gd |gŽ  d d d «       y # 1 sw Y   �Œ0xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒÜxY w# 1 sw Y   Œ¸xY w# 1 sw Y   ŒšxY w# 1 sw Y   ŒvxY w# 1 sw Y   y xY w)Né<   r—   ztoo many values to unpackrç  r   r#  r6   )Únumrñ  )ç– Ð>IÀrþ  ç– Ð>KÀrÿ  zInvalid inputs)r)   r6   r4   r7   )r   g333333Ó?gš™™™™™É?r)   )	rF   rJ   rt   rB   rD   r   rö   r`   rC   )rM   rm   rö  s      rP   Útest_splprep_errorszTestInterop.test_splprep_errors  sy  € ä�I‰I�eÓ×$Ñ$ YÓ/ˆÜœ:Ð-HÔIñ 	Ü�AŒJ÷	äœ:Ð-HÔIñ 	Ü�M‰M˜!Ô÷	ô �K‰K˜˜2 1Ô%ˆÜœ9Ð,=Ô>ñ 	Ü�Q�CŒL÷	äœ9Ð,=Ô>ñ 	Ü�M‰M˜1˜#Ô÷	ò
 EˆÜœ:Ð-=Ô>ñ 	Ü�Q�CŒL÷	äœ:Ð-=Ô>ñ 	Ü�M‰M˜1˜#Ô÷	ò ˆÚˆÜœ:Ð-=Ô>ñ 	%Ü�q�c˜4 �^Ñ$÷	%ð 	%÷/	ñ 	ú÷	ñ 	ú÷
	ð 	ú÷	ð 	ú÷	ð 	ú÷	ð 	ú÷	%ð 	%úsS   ¶E0ÁE=Â"F
ÃFÃ<F"Ä"F.ÅF:Å0E:Å=FÆ
FÆFÆ"F+Æ.F7Æ:Gc                 óž  — | j                   | j                  }}t        j                  g d¢«      t        j                  z  }t        t        |«      |dd¬«       t        t        |j                  |j                  |j                  f«      |dd¬«       t        t        d¬«      5  t        |d¬«       d d d «       |j                  j                  dd	d
«      }t        j                  t        |j                  ||j                  fd¬«      «      }|j                  dk(  sJ ‚t        ||z
  t        j                  |«      d¬«       y # 1 sw Y   Œ“xY w)N)r¼   ró   r=   r”  r¨   rT   zCalling sproot.. with BSplinerç  ri   )Úmestr)   r4   r   )r6   r4   r7   ræ   rk   )rO   rä  rF   r  r•  r   r   r-   r.   r/   rB   rD   rê  rs   r™   rÉ   )rM   rO   rä  ÚrootsÚc2rÚrrs         rP   Útest_sprootzTestInterop.test_sproot1  sõ   € Ø—‘˜Ÿ™ˆ2ˆÜ—‘Ò-Ó.¬r¯u©uÑ4ˆäœ˜q›	 5¨t¸$Õ?Üœ §¡ Q§S¡S¨!¯#©#˜Ó/°¸TÈÕMô œ:Ð-LÔMñ 	 Ü�2˜BÕ÷	 ð �d‰d�n‰n˜Q  1Ó%ˆÜ�Z‰Zœ §¡ c¨2¯4©4Ð0°rÔ:Ó;ˆØ�x‰x˜9Ò$Ð$Ð$Ü˜˜U™
¤B§M¡M°"Ó$5¸EÖB÷	 ð 	 ús   Â#EÅEc           	      óJ  — | j                   | j                  }}t        t        dd|«      t        dd|j                  «      dd¬«       t        t        dd|«      |j                  dd«      dd¬«       t        t        d¬«      5  t        dd|«       d d d «       |j                  j                  ddd«      }t        j                  t        dd|j                  ||j                  f«      «      }|j                  d	k(  sJ ‚t        |t        dd|«      dd¬
«       y # 1 sw Y   Œ‰xY w)Nr   r)   rj   F)rU   Úcheck_0dzCalling splint.. with BSplinerç  r4   )r6   r4   )rU   Úcheck_shape)rO   rä  r   r   rY   rõ   rB   rD   r.   rê  rF   rs   r-   r/   r™   )rM   rO   rä  r  Úintegrs        rP   Útest_splintzTestInterop.test_splintB  s÷   € à—‘˜Ÿ™ˆ2ˆäœ˜q ! Q›Ü˜q ! Q§U¡UÓ+°%À%õ	Iäœ˜q ! Q›ØŸ™ A qÓ)°Àõ	Gô œ:Ð-LÔMñ 	Ü�1�a˜Ô÷	ð �d‰d�n‰n˜Q  1Ó%ˆÜ—‘œF 1 a¨"¯$©$°°R·T±TÐ):Ó;Ó<ˆØ�|‰|˜vÒ%Ð%Ð%Ü˜Ü˜q ! Q›¨eÀö	H÷	ð 	ús   ÂDÄD"c           	      ó¼  — | j                   | j                  fD �]@  }t        |j                  «      t        |j                  «      z
  }|j                  j                  «       }|dkD  r9t        j                  |t        j                  |f|j                  dd  z   «      f   }dD ]µ  }t        |«      }t        j                  |j                  j                  «       ||j                  f«      }t        |j                  |d   d¬«       t        |j                  |d   d¬«       |j                  |d   k(  sJ ‚t        |t        «      sJ ‚t        |t         «      rŒµJ ‚ �ŒC y ©Nr   r)   rh   rS   rk   r4   )rO   rä  r(  r-   r.   rÞ  rF   rŸ   Úzerosr™   r   rö   r/   r   r   r   r  ©rM   rO   ÚctÚb_crN   ÚbdÚtck_ds          rP   Útest_splderzTestInterop.test_splderV  s  € Ø—&‘&˜$Ÿ'™'Ð"ó 	0ˆAä�Q—S‘S“œC §¡›HÑ$ˆBØ—#‘#—(‘(“*ˆCØ�AŠvÜ—e‘e˜C¤§¡¨2¨%°#·)±)¸A¸B°-Ñ*?Ó!@Ð@ÑA�àò 0�Ü˜A“Y�ÜŸ™ a§c¡c§h¡h£j°#°q·s±sÐ%;Ó<�Ü §¡ e¨A¡h°UÕ;Ü §¡ e¨A¡h°UÕ;Ø—t‘t˜u Q™xÒ'Ð'Ð'Ü! "¤gÔ.Ð.Ð.Ü! %¬Õ/Ð/Ð/ò0ñ	0rf   c           	      ó¼  — | j                   | j                  fD �]@  }t        |j                  «      t        |j                  «      z
  }|j                  j                  «       }|dkD  r9t        j                  |t        j                  |f|j                  dd  z   «      f   }dD ]µ  }t        |«      }t        j                  |j                  j                  «       ||j                  f«      }t        |j                  |d   d¬«       t        |j                  |d   d¬«       |j                  |d   k(  sJ ‚t        |t        «      sJ ‚t        |t         «      rŒµJ ‚ �ŒC y r  )rO   rä  r(  r-   r.   rÞ  rF   rŸ   r  r™   r   rö   r/   r   r   r   r  r  s          rP   Útest_splantiderzTestInterop.test_splantiderg  s  € Ø—&‘&˜$Ÿ'™'Ð"ó 	0ˆAä�Q—S‘S“œC §¡›HÑ$ˆBØ—#‘#—(‘(“*ˆCØ�AŠvÜ—e‘e˜C¤§¡¨2¨%°#·)±)¸A¸B°-Ñ*?Ó!@Ð@ÑA�àò 0�Ü “]�Ü×(Ñ(¨!¯#©#¯(©(«*°c¸1¿3¹3Ð)?Ó@�Ü §¡ e¨A¡h°UÕ;Ü §¡ e¨A¡h°UÕ;Ø—t‘t˜u Q™xÒ'Ð'Ð'Ü! "¤gÔ.Ð.Ð.Ü! %¬Õ/Ð/Ð/ò0ñ	0rf   c                 ó‚  — | j                   | j                  | j                  }}}|j                  j                  dz  }d|j                  |   |j                  |dz      z   z  }t        ||«      t        ||j                  |j                  |j                  f«      }}t        t        ||«      t        ||«      d¬«       t        |t        «      sJ ‚t        |t        «      sJ ‚t        t        |j                  j                  «      «      }|j                  j                  |dd  dz   «      }	t        ||j                  |	|j                  f«      }
t        ||«      }t        t!        j"                  t        ||
«      «      j                  ddd«       ||«      d¬«       t        |t        «      sJ ‚t        |
t        «      sJ ‚y )Nr4   r¼   r)   rS   rk   ré  r   )rO   rä  rd   r-   r–   r   r.   r/   r   r   r   r   r  rÈ   r  rê  rF   rs   )rM   rO   rä  rd   ré   ÚtnÚbnÚtck_nr  rí   Útck_n2Úbn2s               rP   rz  zTestInterop.test_insertx  sb  € Ø—F‘F˜DŸG™G T§W¡Wˆrˆ2ˆà�C‰C�H‰H˜‰MˆØ�!—#‘#�a‘&˜1Ÿ3™3˜q ™s™8Ñ#Ñ$ˆä˜2˜q“M¤6¨"¨q¯s©s°A·C±C¸¿¹¨oÓ#>ˆEˆÜœ˜b "›Ü˜b %Ó(¨uõ	6ä˜"œgÔ&Ð&Ð&Ü˜%¤Ô'Ð'Ð'ô ”5˜Ÿ™Ÿ™Ó#Ó$ˆØ�T‰T�^‰^˜B˜q˜r˜F T™MÓ*ˆÜ˜˜RŸT™T 2 r§t¡tÐ,Ó-ˆä�R˜‹nˆô 	œŸ
™
¤5¨¨VÓ#4Ó5×?Ñ?ÀÀ1ÀaÓHÙ˜B› eõ	-ä˜#œwÔ'Ð'Ð'Ü˜&¤%Ô(Ð(Ñ(rf   N)r  r	  r
  rå  rë  rï  ró  rú  r   r  r  r  r  rz  r  rf   rP   rá  rá  ±  s=   „ ò-òHò6-ò0'ò Dò%ò:Cò"Hò(0ò"0ó")rf   rá  c                   ó¸  — e Zd Z ej                  ddej
                  z  «      Z ej                  e«      Zd„ Z	d„ Z
d„ Zej                  j                  dg d¢«      d„ «       Zej                  j                  dg d¢«      d	„ «       Zd
„ Zd„ Zej                  j                  dg d¢«      d„ «       Zd„ Zd„ Zd„ Zej                  j                  dg d¢«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zej                  j;                  d¬«      d„ «       Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&ej                  j                  dg d#¢«      d$„ «       Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+d)„ Z,y*)+Ú
TestInterpr8   r9   c                 ó�   — t        t        «      5  t        | j                  | j                  d¬«       d d d «       y # 1 sw Y   y xY w)Nr=   rå   )rB   rC   r
   rd   r·   ©rM   s    rP   Útest_non_int_orderzTestInterp.test_non_int_orderš  s3   € Üœ9Ó%ñ 	8Ü˜tŸw™w¨¯©°3Õ7÷	8÷ 	8ñ 	8ús	   �#<¼Ac                 ó2  — t        | j                  | j                  d¬«      }t         || j                  «      | j                  dd¬«       t        | j                  | j                  dd¬«      }t         || j                  «      | j                  dd¬«       y )Nr   rå   rj   rT   r2   ©r/   r  ©r
   rd   r·   r   râ   s     rP   Útest_order_0zTestInterp.test_order_0ž  ód   € Ü˜tŸw™w¨¯©°1Ô5ˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜ˜tŸw™w¨¯©°1¸2Ô>ˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÖDrf   c                 ó2  — t        | j                  | j                  d¬«      }t         || j                  «      | j                  dd¬«       t        | j                  | j                  dd¬«      }t         || j                  «      | j                  dd¬«       y )Nr)   rå   rj   rT   r2   r#  r$  râ   s     rP   Útest_linearzTestInterp.test_linear¤  r&  rf   r/   rÒ   c                 ó|   — g d¢}g d¢}t        t        d¬«      5  t        |||¬«       d d d «       y # 1 sw Y   y xY w)N©r   r)   r4   r6   r7   r˜   )r   r)   r4   r6   r7   r˜   r“   r”   zShapes of xrç  rå   ©rB   rD   r
   ©rM   r/   rm   r‹   s       rP   Útest_incompatible_x_yz TestInterp.test_incompatible_x_yª  s7   € âˆÚ$ˆÜœ:¨]Ô;ñ 	*Ü˜q ! qÕ)÷	*÷ 	*ñ 	*ús   š2²;c                 ó¤  — g d¢}g d¢}t        t        d¬«      5  t        |||¬«       d d d «       g d¢}t        t        d¬«      5  t        |||¬«       d d d «       g d¢}t        j                  |«      j                  d«      }t        t        d¬«      5  t        |||¬«       d d d «       y # 1 sw Y   Œ†xY w# 1 sw Y   ŒfxY w# 1 sw Y   y xY w)	N)r   r)   r)   r4   r6   r7   r*  zx to not have duplicatesrç  rå   )r   r4   r)   r6   r7   r˜   zExpect x to be a 1D strictly)r)   r2   )rB   rD   r
   rF   rs   rt   r,  s       rP   Útest_broken_xzTestInterp.test_broken_x±  s»   € âˆÚˆÜœ:Ð-GÔHñ 	*Ü˜q ! qÕ)÷	*ò ˆÜœ:Ð-KÔLñ 	*Ü˜q ! qÕ)÷	*ò ˆÜ�J‰J�q‹M×!Ñ! 'Ó*ˆÜœ:Ð-KÔLñ 	*Ü˜q ! qÕ)÷	*ð 	*÷	*ð 	*ú÷	*ð 	*ú÷
	*ð 	*ús#   šB.ÁB:ÂCÂ.B7Â:CÃCc                 ó¦   — dD ]L  }t        | j                  | j                  |«      }t         || j                  «      | j                  dd¬«       ŒN y )N©r4   r6   r7   r˜   r“   r”   rj   rT   r$  )rM   r/   rO   s      rP   Útest_not_a_knotzTestInterp.test_not_a_knotÁ  sC   € Ø#ò 	IˆAÜ" 4§7¡7¨D¯G©G°QÓ7ˆAÜ™A˜dŸg™g›J¨¯©°eÀ%ÖHñ	Irf   c                 óZ  — t        | j                  | j                  dd¬«      }t         || j                  «      | j                  dd¬«       t	        dd«      D ]:  }t         || j                  d   |¬«       || j                  d	   |¬«      d
¬«       Œ< t        | j                  | j                  ddd	¬«      }t         || j                  «      | j                  dd¬«       t	        dd«      D ]:  }t         || j                  d   |¬«       || j                  d	   |¬«      d
¬«       Œ< y )Nr˜   r»   r$  rj   rT   r)   r   rÆ   r2   ç•dyáý¥=rk   ©r/   r%  r  )r
   rd   r·   r   rÈ   )rM   rO   r÷   s      rP   Útest_periodiczTestInterp.test_periodicÆ  sî   € ä˜tŸw™w¨¯©°1¸jÔIˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDô �q˜!“ò 	SˆAÜ™A˜dŸg™g a™j¨QÔ/±°4·7±7¸2±;À1Ô1EÈEÖRð	Sô ˜tŸw™w¨¯©°1¸jÈrÔRˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜ�q˜!“ò 	SˆAÜ™A˜dŸg™g a™j¨QÔ/±°4·7±7¸2±;À1Ô1EÈEÖRñ	Srf   r1  c                 ó  — d}t         j                  j                  d«      }t        j                  |j	                  |«      dz  «      }|j	                  |«      dz  }|d   |d<   t        |||d¬«      }t         ||«      |d	¬
«       y )Nr˜   r…   r^   rŽ   r2   r   r»   r$  rj   rk   )rF   rL   rˆ   r‰   r&  r
   r   )rM   r/   rN   rŠ   rm   r‹   rO   s          rP   Útest_periodic_randomzTestInterp.test_periodic_randomÔ  s}   € ð ˆÜ�i‰i×#Ñ# DÓ)ˆÜ�G‰G�C×%Ñ% aÓ(¨2Ñ-Ó.ˆØ×Ñ˜aÓ  3Ñ&ˆØ�‰uˆˆ!‰Ü˜q ! q°*Ô=ˆÜ™˜!›˜a eÖ,rf   c                 óh  — | j                   j                  d   }t        j                  j	                  d«      }|j                  |«      dz  t        j                  z  }t        j                  |«      }d|d<   dt        j                  z  |d<   t        j                  d|f«      }t        j                  |«      |d<   t        j                  |«      |d<   t        ||ddd¬	«      }t        |«      D ]   }t         |||   «      |d d …|f   d
¬«       Œ" t         ||d   «       ||d   «      d
¬«       y )Nr   r…   r4   r8   r2   r)   r˜   r»   r5  rj   rk   )rd   r™   rF   rL   rˆ   r&  r•  r‰   r  rq  rs  r
   rÈ   r   )rM   rN   rŠ   rm   r‹   rO   r÷   s          rP   Útest_periodic_axiszTestInterp.test_periodic_axisß  sþ   € Ø�G‰G�M‰M˜!ÑˆÜ�i‰i×#Ñ# DÓ)ˆØ×Ñ˜aÓ  1Ñ$¤r§u¡uÑ,ˆÜ�G‰G�A‹JˆØˆˆ!‰Ø”B—E‘E‘	ˆˆ"‰Ü�H‰H�a˜�VÓˆÜ�v‰v�a‹yˆˆ!‰Ü�v‰v�a‹yˆˆ!‰Ü˜q ! q°*À1ÔEˆÜ�q“ò 	:ˆAÜ™A˜a ™d›G Q¢q¨! t¡W°5Ö9ð	:ä™˜!˜A™$›¡ 1 R¡5£°Ö6rf   c                 ó0  — t         j                  j                  d«      }d}d}t        j                  |j	                  |«      «      }|j	                  |«      }|d   dz
  |d<   t        t        «      5  t        |||d¬«       d d d «       y # 1 sw Y   y xY w)	Nr…   r˜   rº   r2   r)   r   r»   r$  )rF   rL   rˆ   r‰   r&  rB   rD   r
   )rM   rŠ   r/   rN   rm   r‹   s         rP   Útest_periodic_points_exceptionz)TestInterp.test_periodic_points_exceptionî  s…   € ä�i‰i×#Ñ# DÓ)ˆØˆØˆÜ�G‰G�C×%Ñ% aÓ(Ó)ˆØ×Ñ˜aÓ ˆØ�‰u�q‰yˆˆ!‰Üœ:Ó&ñ 	>Ü˜q ! q°*Õ=÷	>÷ 	>ñ 	>ús   Á3BÂBc                 óP  — t         j                  j                  d«      }d}d}t        j                  |j	                  |«      «      }|j	                  |«      }t        j
                  |d|z  z   «      }t        t        «      5  t        ||||d«       d d d «       y # 1 sw Y   y xY w)Nr…   r6   r”   r4   r»   )	rF   rL   rˆ   r‰   r&  r  rB   rD   r
   )rM   rŠ   r/   rN   rm   r‹   r-   s          rP   Útest_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exceptionù  sŒ   € ä�i‰i×#Ñ# DÓ)ˆØˆØˆÜ�G‰G�C×%Ñ% aÓ(Ó)ˆØ×Ñ˜aÓ ˆÜ�H‰H�Q˜˜Q™‘YÓˆÜœ:Ó&ñ 	7Ü˜q ! Q¨¨:Ô6÷	7÷ 	7ñ 	7ús   ÂBÂB%rž  c                 óŠ  — t        | j                  | j                  |d¬«      }t        | j                  | j                  d|¬«      }t	        | j                  |«      }t        | || j                  «      d¬«       t        d|«      D ]:  }t	        | j                  ||¬«      }t        | || j                  |¬	«      d
¬«       Œ< y )Nr»   r$  T)rŽ  r/   rj   rk   r)   rÄ   rÆ   r¦   )r
   rd   r·   r   r   r   rÈ   )rM   r/   rO   rY   r  r÷   s         rP   Útest_periodic_splevzTestInterp.test_periodic_splev  s˜   € ô ˜tŸw™w¨¯©°1¸jÔIˆÜ�T—W‘W˜dŸg™g¨4°1Ô5ˆÜ�D—G‘G˜SÓ!ˆÜ˜™Q˜tŸw™w›Z¨eÕ4ô �q˜!“ò 	?ˆAÜ˜Ÿ™ ¨!Ô,ˆCÜ˜C¡ 4§7¡7¨qÔ!1¸Ö>ñ	?rf   c                 ó   — t        | j                  | j                  dd¬«      }t        | j                  | j                  d¬«      }t	         || j                  «       || j                  «      d¬«       t
        j                  j                  d«      }d}t        j                  |j                  |«      dz  «      }|j                  |«      d	z  }|d
   |d<   t        ||dd¬«      }t        ||d¬«      }t	         ||«       ||«      d¬«       y )Nr6   r»   r$  rG  rj   rk   r…   r^   rŽ   r2   r   )
r
   rd   r·   r   r   rF   rL   rˆ   r‰   r&  )rM   rO   ÚcubrŠ   rN   rm   r‹   s          rP   Útest_periodic_cubiczTestInterp.test_periodic_cubic  sÙ   € ä˜tŸw™w¨¯©°1¸jÔIˆÜ˜$Ÿ'™' 4§7¡7°JÔ?ˆÜ™˜$Ÿ'™'›
¡C¨¯©£L°uÕ=ô �i‰i×#Ñ# DÓ)ˆØˆÜ�G‰G�C×%Ñ% aÓ(¨2Ñ-Ó.ˆØ×Ñ˜aÓ  3Ñ&ˆØ�‰uˆˆ!‰Ü˜q ! q°*Ô=ˆÜ˜!˜Q¨
Ô3ˆÜ™˜!›™c !›f¨5Ö1rf   c                 óT  ‡‡‡— dŠt        | j                  | j                  ‰d¬«      }t        | j                  ‰«      Št	        | j                  | j                  ‰‰«      Št        j                  ˆˆˆfd„«      }t         || j                  «       || j                  «      d¬«       y )Nr6   r»   r$  c                 ó    •— t        | ‰‰‰«      S r´  )rz   )rm   r.   r/   r-   s    €€€rP   rÅ  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>(  s   ø€ ¤K°°1°a¸Ó$;€ rf   rj   rk   )r
   rd   r·   r   r   rF   Ú	vectorizer   )rM   rO   r  r.   r/   r-   s      @@@rP   Útest_periodic_full_matrixz$TestInterp.test_periodic_full_matrix!  su   ú€ ð ˆÜ˜tŸw™w¨¯©°1¸jÔIˆÜ˜DŸG™G QÓ'ˆÜ& t§w¡w°·±¸¸AÓ>ˆÜ�\‰\Õ;Ó<ˆÜ™˜$Ÿ'™'›
¡B t§w¡w£K°eÖ<rf   c                 óê  — dg}t        | j                  | j                  dd |f¬«      }t         || j                  «      | j                  dd¬«       t         || j                  d   d«      |d   d   ddd	¬
«       t        | j                  | j                  d|d f¬«      }t         || j                  «      | j                  dd¬«       t         || j                  d   d«      |d   d   ddd	¬
«       y )N©r)   g       @r4   r$  rj   rT   r2   r)   r   F©rU   rV   r  r$  )rM   rÅ   rO   s      rP   Útest_quadratic_derivzTestInterp.test_quadratic_deriv+  sÍ   € Øˆiˆô ˜tŸw™w¨¯©°1¸tÀS¸kÔJˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜÙˆd�g‰g�b‰k˜1Ó˜s 1™v a™y¨u¸5È5õ	
ô
 ˜tŸw™w¨¯©°1¸sÀD¸kÔJˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜÙˆd�g‰g�a‰j˜!Ó˜c !™f Q™i¨e¸%È%ö	
rf   c           	      ó2  — d}dgdg}}t        | j                  | j                  |||f¬«      }t         || j                  «      | j                  dd¬«       t        t	        j
                   || j                  d   d«       || j                  d	   d«      g«      t	        j
                  |d   d   |d   d   g«      dd¬«       d
gd
g}}t        | j                  | j                  |||f¬«      }t         || j                  «      | j                  dd¬«       y )Nr6   ©r)   r:   )r)   r;   rG  rj   rT   r   r)   r2   ©r4   r   )r
   rd   r·   r   rF   rs   )rM   r/   Úder_lÚder_rrO   s        rP   Útest_cubic_derivzTestInterp.test_cubic_deriv<  sî   € Øˆð  �y 7 )ˆuˆÜ˜tŸw™w¨¯©°¸UÀE¸NÔKˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜœŸ
™
¡A d§g¡g¨a¡j°!Ó$4±a¸¿¹À¹ÀQÓ6GÐ#HÓIÜŸ
™
 E¨!¡H¨Q¡K°°q±¸!±Ð#=Ó>ÀUÐQVõ	Xð �x & ˆuˆÜ˜tŸw™w¨¯©°¸UÀE¸NÔKˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÖDrf   c                 ó|  — d\  }}t        j                  |«      j                  t         j                  «      }t        j                  |«      }ddg}ddg}t        |||||f¬«      }t         ||«      |dd¬«       t        t        j                   ||d	   d
«       ||d	   d«      g«      t        j                  |D ��	cg c]  \  }}	|	‘Œ	 c}	}«      «       t        t        j                   ||d   d
«       ||d   d«      g«      t        j                  |D ��	cg c]  \  }}	|	‘Œ	 c}	}«      «       y c c}	}w c c}	}w )N)r˜   r”   )r)   g      (À)r4   r)   rI  )r4   r:   r$  rj   rT   r   r)   r4   r2   )rF   rJ   ÚastyperK   rq  r
   r   rs   )
rM   r/   rN   rm   r‹   rO  rP  rO   rÇ   Úvals
             rP   Útest_quintic_derivszTestInterp.test_quintic_derivsK  s  € Ø‰ˆˆ1Ü�I‰I�a‹L×Ñ¤§
¡
Ó+ˆÜ�F‰F�1‹IˆØ˜FÐ#ˆØ˜'Ð"ˆÜ˜q ! q°5¸%°.ÔAˆÜ™˜!›˜a e°%Õ8ÜœŸ
™
¡A a¨¡d¨A£J±°!°A±$¸³
Ð#;Ó<ÜŸ
™
¸×#?©I¨R°¢CÓ#?Ó@ô	BäœŸ
™
¡A a¨¡e¨Q£K±°1°R±5¸!³Ð#=Ó>ÜŸ
™
¸×#?©I¨R°¢CÓ#?Ó@õ	Bùó $@ùã#?s   Â>D2ÄD8Úunstable)Úreasonc                 óÚ   — d}t        | j                  |«      }ddg}t        | j                  | j                  |||d f¬«      }t	         || j                  «      | j                  dd¬«       y )Nr6   rM  )r4   r;   rG  rj   rT   )r   rd   r
   r·   r   )rM   r/   r-   rO  rO   s        rP   Útest_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstableX  s[   € ð ˆÜ�D—G‘G˜QÓˆà˜'Ð"ˆÜ˜tŸw™w¨¯©°°AÀÀt¸}ÔMˆÜ™˜$Ÿ'™'›
 D§G¡G°%¸eÖDrf   c                 ó:  — d}t         j                  | j                  d   f|dz   z  | j                  dd  | j                  d d z   dz  | j                  d   f|dz   z  f   }t        | j                  | j                  ||dgdgf¬«      }t         || j                  «      | j                  dd¬	«       t         || j                  d   d«      t        j                  d
«      d¬«       t         || j                  d   d«      t        j                  d
«      d¬«       y )Nr4   r   r)   r2   r9   rN  rG  rj   rT   r8   rk   )rF   rŸ   rd   r
   r·   r   rs   )rM   r/   r-   rO   s       rP   Útest_knots_not_data_sitesz$TestInterp.test_knots_not_data_sitesg  sò   € ð ˆÜ�E‰E�4—7‘7˜1‘:�-  1¡Ñ%Ø—7‘7˜1˜2�; §¡¨¨" Ñ-°Ñ3Ø—7‘7˜2‘;�. ! A¡#Ñ&ð'ñ (ˆô ˜tŸw™w¨¯©°°AØ)/¨°6°(Ð';ô=ˆô 	™˜$Ÿ'™'›
 D§G¡G°%¸eÕDÜ™˜$Ÿ'™' !™* aÓ(¬"¯*©*°S«/ÀÕFÜ™˜$Ÿ'™' "™+ qÓ)¬2¯:©:°c«?ÀÖGrf   c                 óž   — d}ddg}ddg}t        |||dgdgf¬«      }t        j                  dd«      }|dz  }t         ||«      |dd¬«       y )	Nr6   r8   r+   ©r)   r8   rM  rG  rj   rT   )r
   rF   r`   r   )rM   r/   rm   r‹   rO   rd   r·   s          rP   Útest_minimum_points_and_derivz(TestInterp.test_minimum_points_and_derivv  s_   € ð ˆØ�ˆHˆØ�ˆHˆÜ˜q ! Q°'°¸W¸IÐ0FÔGˆä�[‰[˜˜RÓ ˆØ�‰UˆÜ™˜"›˜r¨°EÖ:rf   c                 ó  — g d¢x}}t        t        «      5  t        ||dgd f¬«       d d d «       t        t        «      5  t        ||d¬«       d d d «       t        t        «      5  t        ||dg¬«       d d d «       t        t        «      5  t        ||d¬«       d d d «       d\  }}t        t        «      5  t        ||||f¬«       d d d «       y # 1 sw Y   ŒªxY w# 1 sw Y   Œ�xY w# 1 sw Y   ŒuxY w# 1 sw Y   Œ[xY w# 1 sw Y   y xY w)N)r+   r4   r6   r7   r˜   r“   r]  rG  é*   )r]  r]  r+  ©rM   rm   r‹   ÚlÚrs        rP   Útest_deriv_speczTestInterp.test_deriv_spec‚  s  € ò %Ð$ˆˆAäœ:Ó&ñ 	@Ü˜q !¨w¨i¸Ð->Õ?÷	@ô œ:Ó&ñ 	6Ü˜q !¨WÕ5÷	6ô œ:Ó&ñ 	8Ü˜q !¨g¨YÕ7÷	8ô œ:Ó&ñ 	1Ü˜q !¨RÕ0÷	1ð
 "‰ˆˆ1Üœ:Ó&ñ 	5Ü˜q !¨a°¨VÕ4÷	5ð 	5÷	@ð 	@ú÷	6ð 	6ú÷	8ð 	8ú÷	1ð 	1ú÷	5ð 	5ús:   –C¿CÁ%C)ÂC5Â7DÃCÃC&Ã)C2Ã5C>ÄD
c                 ó(  — t        j                  d«      }|dz  }dgdg}}t        t        d¬«      5  t	        ||||f¬«       d d d «       dgdg}}t        t        d	¬«      5  t	        ||||f¬«       d d d «       y # 1 sw Y   Œ:xY w# 1 sw Y   y xY w)
Nr”   r4   )r“   r   ©r)   r   zBad boundary conditions at 0.rç  rG  )iúÿÿÿr   zBad boundary conditions at 6.)rF   rJ   rB   rD   r
   ra  s        rP   Útest_deriv_order_too_largez%TestInterp.test_deriv_order_too_large™  s™   € Ü�I‰I�a‹LˆØˆq‰DˆØˆx˜&˜ˆ1ˆÜœ:Ð-LÔMñ 	5ä˜q !¨a°¨VÕ4÷	5ð ˆx˜'˜ˆ1ˆÜœ:Ð-LÔMñ 	5ä˜q !¨a°¨VÕ4÷	5ð 	5÷	5ð 	5ú÷
	5ð 	5ús   ²A<Á"BÁ<BÂBc                 ó„  — d}| j                   }| j                  d| j                  z  z   }dgdg}}t        |||||f¬«      }t         ||«      |dd¬«       t         ||d   d	«      |d   d	   ddd
¬«       t         ||d   d	«      |d   d	   ddd
¬«       dD ]%  }t        |||¬«      }t         ||«      |dd¬«       Œ' y )Nr6   r*   )r)   y              @)r)   y      @       @rG  rj   rT   r   r)   FrJ  r2   )r   r)   rå   )rd   r·   r
   r   )rM   r/   rd   r·   rO  rP  rO   s          rP   rœ  zTestInterp.test_complex¦  sØ   € ØˆØ�W‰WˆØ�W‰W�s˜4Ÿ7™7‘{Ñ"ˆð !�z K =ˆuˆÜ˜r 2 q°5¸%°.ÔAˆÜ™˜"›˜r¨°EÕ:ÜÙˆb�‰e�Q‹K˜˜q™ !™¨5°uÀuõ	
ô 	Ùˆb�‰f�a‹L˜% ™( 1™+¨E¸Èõ	
ð
 ò 	?ˆAÜ" 2 r¨QÔ/ˆAÜ™A˜b›E 2¨E¸Ö>ñ	?rf   c                 óÞ   — t        j                  d«      j                  t        «      }t        j                  d«      j                  t        «      }dD ]  }t	        |||¬«      } ||«       Œ y )Nr^   rÒ   rå   )rF   rJ   rS  Úintr
   )rM   rm   r‹   r/   rO   s        rP   Útest_int_xyzTestInterp.test_int_xy»  sX   € Ü�I‰I�b‹M× Ñ ¤Ó%ˆÜ�I‰I�b‹M× Ñ ¤Ó%ˆð ò 	ˆAÜ" 1 a¨1Ô-ˆAÙˆa�Dñ	rf   c                 ó|   — t        j                  ddd«      }|d d d…   }|d d d…   }dD ]  }t        |||¬«       Œ y )Nr2   r)   rŽ   r˜   rÒ   rå   )rF   r`   r
   )rM   rd   rm   r‹   r/   s        rP   Útest_sliced_inputzTestInterp.test_sliced_inputÅ  sI   € ä�[‰[˜˜Q Ó$ˆà‰s�ˆs‰GˆØ‰s�ˆs‰Gˆàò 	*ˆAÜ˜q ! qÖ)ñ	*rf   c                 óþ   — t        j                  d«      j                  t        «      }|dz  }t         j                  t         j
                  t         j
                   fD ]  }||d<   t        t        t        ||«       Œ y )Nr^   r4   r2   )	rF   rJ   rS  ÚfloatrH   rI   rB   rD   r
   ©rM   rm   r‹   Úzs       rP   Útest_check_finitezTestInterp.test_check_finiteÏ  sa   € ä�I‰I�b‹M× Ñ ¤Ó'ˆØˆq‰Dˆä—&‘&œ"Ÿ&™&¤2§6¡6 'Ð*ò 	@ˆAØˆAˆb‰EÜœ*Ô&8¸!¸QÕ?ñ	@rf   )r)   r4   r6   r˜   c                 óv   — t        t        d«      «      }|D �cg c]  }|dz  ‘Œ	 }}t        |||¬«       y c c}w )Nr^   r4   rå   )ÚlistrÈ   r
   )rM   r/   rm   Úar‹   s        rP   Útest_list_inputzTestInterp.test_list_inputØ  s9   € ô ”�r“‹OˆØÖ�aˆQ�‹TÐˆÐÜ˜1˜a 1Ö%ùò s   ™6c                 óÖ  — t         j                  t        j                  | j                  «      t        j                  | j                  «      f   }dddgfg}dddgfg}t        | j                  |d||f¬«      }t         || j                  «      |dd¬	«       t         || j                  d
   d«      |d
   d   dd¬	«       t         || j                  d   d«      |d
   d   dd¬	«       y )Nr)   r+   r9   r:   r;   r6   r$  rj   rT   r   r2   )rF   rí   rq  rd   rs  r
   r   )rM   r·   rO  rP  rO   s        rP   Útest_multiple_rhszTestInterp.test_multiple_rhsß  sÃ   € Ü�U‰U”2—6‘6˜$Ÿ'™'“?¤B§F¡F¨4¯7©7£OÐ3Ñ4ˆØ�b˜"�X��ˆØ�b˜"�X��ˆä˜tŸw™w¨¨a¸%À¸ÔHˆÜ™˜$Ÿ'™'›
 B¨U¸Õ?Ü™˜$Ÿ'™' !™* aÓ(¨%°©(°1©+¸EÈÕNÜ™˜$Ÿ'™' "™+ qÓ)¨5°©8°A©;¸UÈÖOrf   c                 óÖ  — t         j                  j                  d«      }d\  }}t        j                  |j                  |¬«      «      }|j                  |dddf¬«      }t	        |||«      }|j
                  j                  |dddfk(  sJ ‚d|j                  d«      fg}d|j                  d«      fg}t	        |||||f¬	«      }|j
                  j                  ||z   dz
  dddfk(  sJ ‚y )
Nr…   ©r6   r’   r•   r˜   r“   r”   r)   ©r˜   r“   r”   rG  )rF   rL   rˆ   r‰   r
   r.   r™   )	rM   rŠ   r/   rN   rm   r‹   rO   Úd_lÚd_rs	            rP   Útest_shapeszTestInterp.test_shapesé  så   € Ü�i‰i×#Ñ# DÓ)ˆØ‰ˆˆ1Ü�G‰G�C—J‘J A�JÓ&Ó'ˆØ�J‰J˜Q  1 a˜LˆJÓ)ˆä˜q ! QÓ'ˆØ�s‰s�y‰y˜Q  1 a˜LÒ(Ð(Ð(ð �3—:‘:˜iÓ(Ð)Ð*ˆØ�3—:‘:˜iÓ(Ð)Ð*ˆÜ˜q ! Q°°c°
Ô;ˆØ�s‰s�y‰y˜Q ™U Q™Y¨¨1¨aÐ0Ò0Ð0Ñ0rf   c                 ó|  — t        j                  | j                  «      }t        | j                  |dd¬«      }t        | j                  |ddgdgf¬«      }t	        |j
                  |j
                  d¬«       t        | j                  |dd¬«      }t        | j                  |ddgdgf¬«      }t	        |j
                  |j
                  d¬«       t        | j                  |d	d
¬«      }t        | j                  |d	d dgf¬«      }t	        |j
                  |j
                  d¬«       t        | j                  |dd¬«      }t        | j                  |dd ¬«      }t	        |j
                  |j
                  d¬«       t        t        «      5  t        | j                  |dd¬«       d d d «       t         j                  t        j                  | j                  «      t        j                  | j                  «      f   }dddgfg}d	ddgfg}t        | j                  |d||f¬«      }t        | j                  |dd¬«      }t	        |j
                  |j
                  d¬«       t         j                  j                  d«      }d\  }}t        j                  |j                  |¬«      «      }	|j                  |dddf¬«      }
dt        j                  d«      fg}dt        j                  d«      fg}t        |	|
|||f¬«      }t        |	|
|d¬«      }t	        |j
                  |j
                  d¬«       y # 1 sw Y   �Œ�xY w)Nr6   r0  r$  rN  rS   rk   )r0  r/  rf  r4   )Nr/  r]  r1  Útypor)   r8   r.  r…   rz  r•   r˜   r“   r”   r{  rG  r/  )rF   rq  rd   r
   r   r.   rB   rD   rí   rs  rL   rˆ   r‰   r  )rM   r·   r  rä  rO  rP  rŠ   r/   rN   rm   r‹   r|  r}  s                rP   Útest_string_aliaseszTestInterp.test_string_aliasesø  s¦  € Ü�V‰V�D—G‘G‹_ˆô   §¡¨¨q¸)ÔDˆÜ §¡¨¨q¸F¸8ÀfÀXÐ:NÔOˆÜ˜Ÿ™˜bŸd™d¨Õ/ô   §¡¨¨qØ(>ô@ˆä §¡¨¨qØ*0¨°F°8Ð(<ô>ˆä˜Ÿ™˜bŸd™d¨Õ/ô   §¡¨¨qÐ:KÔLˆÜ §¡¨¨q¸4À(ÀÐ:LÔMˆÜ˜Ÿ™˜bŸd™d¨Õ/ô   §¡¨¨q¸,ÔGˆÜ §¡¨¨q¸$Ô?ˆÜ˜Ÿ™˜bŸd™d¨Õ/ô œ:Ó&ñ 	AÜ˜tŸw™w¨¨a¸Õ@÷	Aô �U‰U”2—6‘6˜$Ÿ'™'“?¤B§F¡F¨4¯7©7£OÐ3Ñ4ˆØ�b˜"�X��ˆØ�b˜"�X��ˆÜ §¡¨¨q¸5À%¸.ÔIˆÜ §¡¨¨qØ(>ô@ˆä˜Ÿ™˜bŸd™d¨Õ/ô �i‰i×#Ñ# DÓ)ˆØ‰ˆˆ1Ü�G‰G�C—J‘J A�JÓ&Ó'ˆØ�J‰J˜Q  1 a˜LˆJÓ)ˆð ”2—8‘8˜IÓ&Ð'Ð(ˆØ”2—8‘8˜IÓ&Ð'Ð(ˆÜ  1 a°#°s°Ô<ˆÜ  1 a°Ô;ˆÜ˜Ÿ™˜bŸd™d¨Ö/÷/	Añ 	Aús   Æ
L1Ì1L;c                 ó<  — t         j                  j                  d«      }d\  }}t        j                  |j                  |¬«      «      }|j                  |¬«      }t	        ||«      }t        ||||«      }t        ||||«      }t        |j                  |dd¬«       y )Nr…   )r6   r”   r•   rj   rT   )	rF   rL   rˆ   r‰   r   r
   Úmake_interp_full_matrr   r.   )	rM   rŠ   r/   rN   rm   r‹   r-   rO   r‘  s	            rP   Útest_full_matrixzTestInterp.test_full_matrix+  s†   € Ü�i‰i×#Ñ# DÓ)ˆØ‰ˆˆ1Ü�G‰G�C—J‘J A�JÓ&Ó'ˆØ�J‰J˜AˆJÓˆÜ˜˜1Óˆä˜q ! Q¨Ó*ˆÜ" 1 a¨¨AÓ.ˆÜ˜Ÿ™˜R e°%Ö8rf   c                 óö  — t         j                  j                  d«      }d}t        ddd«      D �]Ç  }t	        |dz
  dz  «      }t        j
                  |j                  d|f«      «      }t        d|dz   «      D ]x  }|d| …|d…fxx   t        j
                  |j                  d||z
  f«      «      z  cc<   ||d…d| …fxx   t        j
                  |j                  d||z
  f«      «      z  cc<   Œz |j                  ||f«      }||d|…| d…f<   |j                  ||f«      }||| d…d|…f<   t        j                  ||f«      }	t        t        || dz
  d«      «      D ]G  \  }}
|
d	k  rt        j                  ||
¬
«      |	|d|
…f<   Œ*t        j                  ||
¬
«      |	||
d…f<   ŒI |j                  |«      }t        t        |	||||«      t         j                  j                  ||«      d¬«       �ŒÊ y)z­
        Random elements in diagonal matrix with blocks in the
        left lower and right upper corners checking the
        implementation of Woodbury algorithm.
        r…   éÉ   r6   é    r4   r)   Nr2   r   )Úoffsetrj   rk   )rF   rL   rˆ   rÈ   rj  Údiagflatr  r©  Údiagonalr   r   ÚlinalgÚsolve)rM   rŠ   rN   r/   rˆ  ru  r÷   ÚurÚllÚdré   rO   s               rP   Útest_woodburyzTestInterp.test_woodbury6  sì  € ô �i‰i×#Ñ# DÓ)ˆØˆÜ�q˜"˜a“ó 	?ˆAÜ˜!˜a™% 1™Ó%ˆFÜ—‘˜CŸJ™J¨¨1 vÓ.Ó/ˆAÜ˜1˜f q™jÓ)ò B�Ø�#�A�2�#�q‘r�'“
œbŸk™k¨#¯*©*°a¸¸Q¹°ZÓ*@ÓAÑA“
Ø�!‘"�c˜�r�c�'“
œbŸk™k¨#¯*©*°a¸¸Q¹°ZÓ*@ÓAÑA”
ðBð —‘˜V VÐ,Ó-ˆBØ#%ˆAˆgˆvˆg˜�w‘xÐÑ Ø—‘˜V VÐ,Ó-ˆBØ#%ˆAˆvˆg‰h˜˜˜ÐÑ Ü—‘˜!˜Q˜Ó ˆAÜ!¤%¨°°¸!±¸RÓ"@ÓAò 8‘��1Ø�q’5Ü!Ÿ{™{¨1°QÔ7�A�a˜˜!˜�e’Hä!Ÿ{™{¨1°QÔ7�A�a˜™�e’Hð	8ð
 —
‘
˜1“ˆAÜÔ/°°2°r¸1¸aÓ@ÜŸI™IŸO™O¨A¨qÓ1¸÷?ñ#	?rf   N)-r  r	  r
  rF   r`   r•  rd   rq  r·   r!  r%  r(  rZ   rh  ri  r-  r/  r2  r6  r8  r:  r<  r>  r@  rC  rG  rK  rQ  rU  ÚxfailrY  r[  r^  rd  rg  rœ  rk  rm  rr  rv  rx  r~  r�  r„  r�  r  rf   rP   r  r  “  s›  „ ð 
ˆ�‰�R˜˜BŸE™E™Ó	"€BØ	ˆ�‰�‹€Bò8òEòEð ‡[�[×Ñ˜S¢,Ó/ñ*ó 0ð*ð ‡[�[×Ñ˜S¢,Ó/ñ*ó 0ð*òIò
Sð ‡[�[×Ñ˜SÒ"4Ó5ñ-ó 6ð-ò7ò	>ò	7ð ‡[�[×Ñ˜S¢,Ó/ñ
?ó 0ð
?ò2ò =ò
ò"EòBð ‡[�[×Ñ˜jÐÓ)ñEó *ðEòHò
;ò5ò.5ò?ò*ò*ò@ð ‡[�[×Ñ˜S¢,Ó/ñ&ó 0ð&òPò1ò10òf	9ó?rf   r  c                 óÐ  — | j                   |j                   k(  sJ ‚|j                   | j                   |z   dz   k(  sJ ‚| j                   }t        j                  ||ft        j                  ¬«      }t	        |«      D ]R  }| |   }|||   k(  r|}nt        j
                  ||«      dz
  }t        j                  ||||«      }	|	||||z
  |dz   …f<   ŒT t        j                  ||«      }
|
S )z»Assemble an spline order k with knots t to interpolate
    y(x) using full matrices.
    Not-a-knot BC only.

    This routine is here for testing only (even though it's functional).
    r)   r@   )
r–   rF   r  rK   rÈ   r·  r%   Úevaluate_all_bsplÚslrŒ  )rm   r‹   r-   r/   rN   ÚAré   rm  ÚleftÚbbr.   s              rP   rƒ  rƒ  S  sã   € ð �6‰6�Q—V‘VÒÐÐØ�6‰6�Q—V‘V˜a‘Z !‘^Ò#Ð#Ð#Ø	�‰€Aä
�‰�!�Q�œrŸz™zÔ*€Aä�1‹Xò 	!ˆØ�‰tˆØ�1�Q‘4Š<Ø‰Dä—?‘? 1 dÓ+¨aÑ/ˆDô ×'Ñ'¨¨1¨d°DÓ9ˆØ ˆˆ!ˆT�!‰V�D˜‘Fˆ]Ð
Òð	!ô 	�‰��A‹€AØ€Hrf   c                 óF  — t        t        j                  | ||f«      \  } }}| j                  }|j                  |z
  dz
  }t        j                  ||ft        j
                  ¬«      }t        |«      D ]R  }| |   }|||   k(  r|}	nt        j                  ||«      dz
  }	t        j                  ||||	«      }
|
|||	|z
  |	dz   …f<   ŒT t        j                  |j                  |«      }t        j                  |j                  |«      }t        j                  ||«      }|||ffS )z,Make the least-square spline, full matrices.r)   r@   )ÚmaprF   rs   r–   r  rK   rÈ   r·  r%   r“  ÚdotÚTr”  rŒ  )rm   r‹   r-   r/   r}  rN   r•  ré   rm  r–  r—  r  ÚYr.   s                 rP   Úmake_lsq_full_matrixr�  o  s	  € ä”"—*‘*˜q ! Q˜iÓ(�G€A€qˆ!Ø	�‰€AØ	�‰�‰
�Q‰€Aä
�‰�!�Q�œrŸz™zÔ*€Aä�1‹Xò 
!ˆØ�‰tˆà�1�Q‘4Š<Ø‰Dä—?‘? 1 dÓ+¨aÑ/ˆDô ×'Ñ'¨¨1¨d°DÓ9ˆØ ˆˆ!ˆT�!‰V�D˜‘Fˆ]Ð
Òð
!ô 	�‰ˆq�s‰s�A‹€AÜ
�‰ˆq�s‰s�A‹€AÜ
�‰��A‹€Aàˆq�!ˆfˆ9Ðrf   Úmethodúnorm-eqÚqrc            	       ó  — e Zd Zej                  j                  d«      Zd\  ZZ ej                  ej	                  e«      «      Z
ej	                  e«      Z e ej                  e
d   e
d   d«      e«      Zed„ «       Zed„ «       Zd„ Zed	„ «       Zed
„ «       Zd„ Zed„ «       Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zej<                  j?                  d e  e!dd«      «      «      d„ «       Z"d„ Z#y)ÚTestLSQr…   )rü   r6   r   r2   r”   c                 ó´  — | j                   | j                  | j                  | j                  f\  }}}}t	        ||||«      \  }}t        |||||¬«      }t        |j                  |«       |j                  j                  |j                  |z
  dz
  fk(  sJ ‚|\  }	}
t        j                  j                  |	|d¬«      \  }}}}t        |j                  |«       y )N©rž  r)   r2   )Úrcond)rm   r‹   r-   r/   r�  r   r   r.   r™   r–   rF   r‹  Úlstsq)rM   rž  rm   r‹   r-   r/   Úc0ÚAYrO   Úaar·   r°  r«   s                rP   Ú
test_lstsqzTestLSQ.test_lstsq—  s¼   € ð —V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�ä% a¨¨A¨qÓ1‰ˆˆBÜ˜A˜q ! Q¨vÔ6ˆä˜Ÿ™˜RÔ Ø�s‰s�y‰y˜QŸV™V a™Z¨!™^Ð-Ò-Ð-Ð-ð ‰ˆˆBÜ—i‘i—o‘o b¨!°2�oÓ6‰ˆˆAˆq�!Ü˜Ÿ™˜RÕ rf   c                 ó”  — | j                   | j                  | j                  | j                  f\  }}}}t	        j
                  |«      }t        |||||¬«      }t        ||||||¬«      }t        |j                  |j                  d¬«       t        |j                  |j                  d¬«       |j                  |j                  k(  sJ ‚y )Nr¤  ©Úwrž  rj   rk   )	rm   r‹   r-   r/   rF   ra   r   r   r.   )	rM   rž  rm   r‹   r-   r/   r­  rO   Úb_ws	            rP   Útest_weightszTestLSQ.test_weights§  s™   € ð —V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�Ü�L‰L˜‹Oˆä˜A˜q ! Q¨vÔ6ˆÜ˜a  A q¨A°fÔ=ˆä˜Ÿ™˜SŸU™U¨Õ/Ü˜Ÿ™˜SŸU™U¨Õ/Ø�s‰s�c—e‘eŠ|Ð‰|rf   c                 óæ  — | j                   | j                  | j                  | j                  f\  }}}}t        j
                  j                  d«      j                  |j                  d   ¬«      }t        |||||d¬«      }t        |||||d¬«      }t        ||||d¬«      }t        |j                  |j                  d¬	«       t	        j                  |j                  |j                  d¬	«      rJ ‚y )
Nr…   r   r•   rŸ  r¬  r   r¤  rj   rk   )rm   r‹   r-   r/   rF   rL   r„  r…  r™   r   r   r.   rÍ   )	rM   rm   r‹   r-   r/   r­  Úb_neÚb_qrÚb_no_ws	            rP   Útest_weights_samezTestLSQ.test_weights_same´  sÁ   € à—V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�Ü�I‰I×!Ñ! $Ó'×/Ñ/°Q·W±W¸Q±ZÐ/Ó@ˆä˜q ! Q¨¨Q°yÔAˆÜ˜q ! Q¨¨Q°tÔ<ˆÜ   A q¨!°DÔ9ˆä˜Ÿ™ §¡¨UÕ3Ü—;‘;˜vŸx™x¨¯©°eÕ<Ð<Ð<Ð<rf   c                 óR  — | j                   | j                  | j                  | j                  f\  }}}}t        j
                  j                  d«      }|j                  |dddf¬«      }t        |||||¬«      }|j                  j                  |j                  |z
  dz
  dddfk(  sJ ‚y )Nr…   r˜   r“   r”   r•   r¤  r)   )rm   r-   r/   rN   rF   rL   rˆ   r   r.   r™   r–   )	rM   rž  rm   r-   r/   rN   rŠ   r‹   rO   s	            rP   rx  zTestLSQ.test_multiple_rhsÀ  s‘   € à—V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�Ü�i‰i×#Ñ# DÓ)ˆØ�J‰J˜Q  1 a˜LˆJÓ)ˆÜ˜A˜q ! Q¨vÔ6ˆØ�s‰s�y‰y˜QŸV™V A™X a™Z¨¨A¨qÐ1Ò1Ð1Ñ1rf   c           
      ó  — | j                   | j                  | j                  | j                  f\  }}}}d}t        j
                  j                  d«      }|j                  ||f¬«      }t        |||||¬«      }	t        |«      D �
cg c]  }
t        ||d d …|
f   |||¬«      ‘Œ }}
t	        j                  t        |«      D �
cg c]  }
||
   j                  ‘Œ c}
«      j                  }t        ||	j                  d¬«       y c c}
w c c}
w )Nr6   r…   r•   r¤  rS   rk   )rm   r-   r/   rN   rF   rL   rˆ   r   rÈ   Úvstackr.   r›  r   )rM   rž  rm   r-   r/   rN   ÚnrhsrŠ   r‹   rO   r÷   r—  Úcoefss                rP   Útest_multiple_rhs_2zTestLSQ.test_multiple_rhs_2È  sâ   € à—V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�ØˆÜ�i‰i×#Ñ# DÓ)ˆØ�J‰J˜Q ˜IˆJÓ&ˆÜ˜A˜q ! Q¨vÔ6ˆô ˜T“{ö$Øô ˜a ¢1 a 4¡¨!¨Q°vÖ>ð $ˆð $ä—	‘	¬E°$«KÖ8 q˜2˜a™5Ÿ7›7Ò8Ó9×;Ñ;ˆä˜˜qŸs™s¨Ö/ùò	$ùâ8s   ÂDÃDc                 ó6  — | j                   | j                  | j                  | j                  f\  }}}}d}t        j
                  j                  ||f¬«      }t        ||||d¬«      }t        ||||d¬«      }t        |j                  |j                  d¬«       y )Nr6   r•   r   r¤  rŸ  rS   rk   )	rm   r-   r/   rN   rF   rL   r   r   r.   )	rM   rm   r-   r/   rN   r¸  r‹   r²  Úb_neqs	            rP   Útest_multiple_rhs_3zTestLSQ.test_multiple_rhs_3Ö  s€   € Ø—V‘V˜TŸV™V T§V¡V¨T¯V©VÐ3‰
ˆˆ1ˆa�ØˆÜ�I‰I×Ñ 1 d )ÐÓ,ˆÜ˜q ! Q¨°$Ô7ˆÜ  1 a¨°9Ô=ˆÜ˜Ÿ™ §¡¨eÖ4rf   c                 ó@  — | j                   | j                  | j                  }}}| j                  dz  }t	        |||||¬«      }t	        ||j
                  |||¬«      }t	        ||j                  |||¬«      }t         ||«       ||«      d ||«      z  z   dd¬«       y )Nù      ð?       @r¤  r*   rS   rT   )rm   r-   r/   r‹   r   rÛ   rÜ   r   )	rM   rž  rm   r-   r/   r>  rO   rÞ   rß   s	            rP   rœ  zTestLSQ.test_complexÞ  sŒ   € ð —&‘&˜$Ÿ&™& $§&¡&ˆaˆ1ˆØ�V‰V�xÑ ˆä˜A˜r 1 a°Ô7ˆÜ˜q "§'¡'¨1¨a¸Ô?ˆÜ˜q "§'¡'¨1¨a¸Ô?ˆä™˜!›™d 1›g¨©D°«G©Ñ3¸%ÀeÖLrf   c                 ób  — | j                   | j                  | j                  }}}| j                  dz  }t	        j
                  ||fd¬«      }t        ||||«      }t        ||j                  ||«      }t        ||j                  ||«      }t         ||«       ||«      d ||«      z  z   dd¬«       t	        j
                  ||fd¬«      }t        ||||«      }t        ||j                  ||«      }t        ||j                  ||«      }t         ||«       ||«      d ||«      z  z   dd¬«       y )Nr¿  r)   r  r*   rS   rT   )
rm   r-   r/   r‹   rF   Ústackr   rÛ   rÜ   r   )rM   rm   r-   r/   r>  rO   rÞ   rß   s           rP   Útest_complex_2zTestLSQ.test_complex_2ê  s  € ð —&‘&˜$Ÿ&™& $§&¡&ˆaˆ1ˆØ�V‰V�xÑ ˆÜ�X‰X�r˜2�h QÔ'ˆä˜A˜r 1 aÓ(ˆÜ˜q "§'¡'¨1¨aÓ0ˆÜ˜q "§'¡'¨1¨aÓ0ˆä™˜!›™d 1›g¨©D°«G©Ñ3¸%ÀeÕLô �X‰X�r˜2�h QÔ'ˆä˜A˜r 1 aÓ(ˆÜ˜q "§'¡'¨1¨aÓ0ˆÜ˜q "§'¡'¨1¨aÓ0ˆä™˜!›™d 1›g¨©D°«G©Ñ3¸%ÀeÖLrf   c                 óÞ   — t        j                  d«      j                  t        «      }t        j                  d«      j                  t        «      }t	        |d¬«      }t        |||d|¬«       y )Nr^   r)   rå   ©r/   rž  )rF   rJ   rS  rj  r   r   ©rM   rž  rm   r‹   r-   s        rP   rk  zTestLSQ.test_int_xy   sM   € ä�I‰I�b‹M× Ñ ¤Ó%ˆÜ�I‰I�b‹M× Ñ ¤Ó%ˆÜ�A˜ŒOˆä˜˜1˜a 1¨VÖ4rf   c                 ó´  — t        j                  dt         j                  ¬«      }t        j                  dt         j                  ¬«      }t        |d¬«      }t	        |||d|¬«      }t	        |j                  t        «      |j                  t        «      |j                  t        «      d|¬«      }|dd  |d d z   dz  }t         ||«       ||«      d¬	«       y )
Nr^   r@   r)   rå   rÄ  r2   r9   rS   rk   )rF   rJ   Úfloat32r   r   rS  ro  r   )rM   rž  rm   r‹   r-   Úspl_f32Úspl_f64Úx2s           rP   Útest_f32_xyzTestLSQ.test_f32_xy  s¤   € ä�I‰I�b¤§
¡
Ô+ˆÜ�I‰I�b¤§
¡
Ô+ˆÜ�A˜ŒOˆÜ! ! Q¨¨Q°vÔ>ˆÜ!Ø�H‰H”U‹O˜QŸX™X¤e›_¨a¯h©h´u«oÀÈ6ô
ˆð ��ˆe�a˜˜�f‰n Ñ#ˆÜ™ ›¡W¨R£[°uÖ=rf   c                 óŠ   — t        j                  ddd«      }|d d d…   }|d d d…   }t        |d«      }t        |||d|¬«       y )Nr2   r)   rŽ   r6   rÄ  )rF   r`   r   r   )rM   rž  rd   rm   r‹   r-   s         rP   rm  zTestLSQ.test_sliced_input  sK   € ô �[‰[˜˜Q Ó$ˆà‰s�ˆs‰GˆØ‰s�ˆs‰GˆÜ�A�q‹MˆÜ˜˜1˜a 1¨VÖ4rf   c           	      ó  — t        j                  d«      j                  t        «      }|dz  }t	        |d«      }t         j
                  t         j                  t         j                   fD ]   }||d<   t        t        t        ||||¬«       Œ" y )Né   r4   r6   r2   r¤  )
rF   rJ   rS  ro  r   rH   rI   rB   rD   r   )rM   rž  rm   r‹   r-   rq  s         rP   Útest_checkfinitezTestLSQ.test_checkfinite  sq   € ô �I‰I�b‹M× Ñ ¤Ó'ˆØˆq‰DˆÜ�A�q‹Mˆä—&‘&œ"Ÿ&™&¤2§6¡6 'Ð*ò 	OˆAØˆAˆb‰EÜœ*¤o°q¸!¸QÀvÖNñ	Orf   c                 óÖ   — | j                   | j                  | j                  }}}|j                  d¬«       |j                  d¬«       |j                  d¬«       t	        ||||¬«       y )NFrS  )rm   r‹   r-   rž  )rm   r‹   r-   rU  r   rÅ  s        rP   rV  zTestLSQ.test_read_only*  sU   € ð —&‘&˜$Ÿ&™& $§&¡&ˆaˆ1ˆØ	�
‰
˜ˆ
ÔØ	�
‰
˜ˆ
ÔØ	�
‰
˜ˆ
ÔÜ˜!˜q A¨fÖ5rf   r/   r)   c                 ó  — | j                   | j                  }}t        t        j                  |d   |d   d«      |«      }t        ||||d¬«      }t        ||||d¬«      }|dd  |d d z   dz  }t         ||«       ||«      d	¬
«       y )Nr   r2   r”   rŸ  rÄ  r   r)   r9   rS   rk   )rm   r‹   r   rF   r`   r   r   )rM   r/   rm   r‹   r-   Úspl_norm_eqÚspl_qrrd   s           rP   Útest_qr_vs_norm_eqzTestLSQ.test_qr_vs_norm_eq3  sˆ   € ð �v‰v�t—v‘vˆ1ˆÜ”B—K‘K  !¡ a¨¡e¨QÓ/°Ó3ˆÜ% a¨¨A°¸9ÔEˆÜ   A q¨A°dÔ;ˆà��ˆe�a˜˜�f‰n Ñ#ˆÜ™ B›©°«¸%Ö@rf   c                 ód  — t        j                  | j                  d«      }t        j                  | j                  d«      }t	        | j                  | j                  | j
                  dd¬«      }t	        ||| j
                  dd¬«      }|dd  |d d z   dz  }t         ||«       ||«      d¬	«       y )
Nr4   r6   r   rÄ  r)   r2   r9   rS   rk   )rF   Úrepeatrm   r‹   r   r-   r   )rM   rm   r‹   ru  Úspl_2rd   s         rP   Útest_duplicateszTestLSQ.test_duplicates>  sŒ   € ä�I‰I�d—f‘f˜aÓ ˆÜ�I‰I�d—f‘f˜aÓ ˆÜ §¡¨¯©°·±¸!ÀDÔIˆÜ  1 d§f¡f°¸$Ô?ˆà��ˆe�a˜˜�f‰n Ñ#ˆÜ™˜b›	¡5¨£9°5Ö9rf   N)$r  r	  r
  rF   rL   rˆ   rŠ   rN   r/   r‰   rm   r‹   r   r`   r-   Úparametrize_lsq_methodsrª  r¯  r´  rx  rº  r½  rœ  rÂ  rk  rË  rm  rÏ  rV  rZ   rh  ri  rt  rÈ   rÔ  rØ  r  rf   rP   r¢  r¢  �  sz  „ ð �)‰)×
Ñ
 Ó
%€CØ�D€A€qØˆ�‰�—
‘
˜1“Ó€AØ�
‰
�1‹€AÙ��—‘˜A˜a™D ! B¡%¨Ó+¨QÓ/€Aàñ!ó ð!ð ñ
ó ð
ò
=ð ñ2ó ð2ð ñ0ó ð0ò5ð ñ	Mó ð	MòMð, ñ5ó ð5ð ñ
>ó ð
>ð ñ5ó ð5ð ñOó ðOð ñ6ó ð6ð ‡[�[×Ñ˜S¡$¡u¨Q°£{Ó"3Ó4ñAó 5ðAó:rf   r¢  c                   ó,   — e Zd ZdZd„ Zed„ «       Zd„ Zy)ÚPackedMatrixas  A simplified CSR format for when non-zeros in each row are consecutive.

    Assuming that each row of an `(m, nc)` matrix 1) only has `nz` non-zeros, and
    2) these non-zeros are consecutive, we only store an `(m, nz)` matrix of
    non-zeros and a 1D array of row offsets. This way, a row `i` of the original
    matrix A is ``A[i, offset[i]: offset[i] + nz]``.

    c                 ó´   — || _         || _        || _        |j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  d   |j                  d   k(  sJ ‚y )Nr4   r)   r   )ru  rˆ  Úncr  r™   )rM   ru  rˆ  rÝ  s       rP   Ú__init__zPackedMatrix.__init__R  sW   € ØˆŒØˆŒØˆŒà�v‰v˜Š{Ðˆ{Ø�{‰{˜aÒÐÐØ�w‰w�q‰z˜VŸ\™\¨!™_Ò,Ð,Ñ,rf   c                 óL   — | j                   j                  d   | j                  fS )Nr   )ru  r™   rÝ  r   s    rP   r™   zPackedMatrix.shape[  s   € à�v‰v�|‰|˜A‰ §¡Ð'Ð'rf   c                 ój  — t        j                  | j                  «      }| j                  j                  d   }t	        |j                  d   «      D ]_  }t        | j                  | j                  |   z
  |«      }| j                  |d |…f   ||| j                  |   | j                  |   |z   …f<   Œa |S )Nr)   r   )rF   r  r™   ru  rÈ   ÚminrÝ  rˆ  )rM   ÚoutÚnelemr÷   Únels        rP   ÚtodensezPackedMatrix.todense_  s    € Ü�h‰h�t—z‘zÓ"ˆØ—‘—‘˜Q‘ˆÜ�s—y‘y ‘|Ó$ò 	JˆAÜ�d—g‘g §¡¨A¡Ñ.°Ó6ˆCØ:>¿&¹&ÀÀDÀSÀDÀ¹/ˆC��4—;‘;˜q‘> $§+¡+¨a¡.°3Ñ"6Ð6Ð6Ò7ð	Jð ˆ
rf   N)r  r	  r
  Ú__doc__rÞ  Úpropertyr™   rå  r  rf   rP   rÛ  rÛ  I  s%   „ ñò-ð ñ(ó ð(órf   rÛ  c                 ó6  — ddl m} | j                  }| j                  }| j                  }|j
                  \  }}|j
                  d   |k(  sJ ‚|j                  «       }	|j                  «       }
t        ||«      D ]É  }||   }t        ||«      D ]³  }|t        ||«      k\  r Œ( ||	|df   |	|df   «      \  }}}||	|df<   t        d|«      D ]*  }t        |||	||f   |	||f   «      \  |	||f<   |	||dz
  f<   Œ, d|	|df<   t        |
j
                  d   «      D ]'  }t        |||
||f   |
||f   «      \  |
||f<   |
||f<   Œ) Œµ ŒË t        t        |	j
                  d   «      «      }t        |	t        j                  |t        j                  ¬«      |«      }||
fS )zjThis is a python counterpart of the `_qr_reduce` routine,
    declared in interpolate/src/__fitpack.h
    r   )Údlartgr)   r8   r2   r@   )Úscipy.linalg.lapackré  ru  rˆ  rÝ  r™   rÞ  rÈ   rá  Úfprotart  rÛ  rF   r  Úint64)Úa_pr‹   Ústartrowré  ru  rˆ  rÝ  r}  ÚnzÚRrv  r÷   Úoiré   r.   rÁ  rc  rb  ÚoffsÚR_ps                       rP   Ú_qr_reduce_pyrô  h  sÇ  € õ +ð 	�‰€AØ�Z‰Z€FØ	�‰€Bà�G‰G�E€A€rà�7‰7�1‰:˜Š?Ðˆ?Ø	�‰‹€AØ	
�‰‹€Bä�8˜QÓò FˆØ�A‰YˆÜ�r˜2“ò 	FˆAà”C˜˜2“JŠÙñ ˜Q˜q !˜t™W a¨¨1¨¡gÓ.‰GˆAˆq�!ð ˆAˆa�ˆd‰GÜ˜1˜b“\ò D�Ü%+¨A¨q°!°A°q°D±'¸1¸QÀ¸T¹7Ó%CÑ"��!�Q�$‘˜˜1˜a ™c˜6šðDàˆAˆa�ˆe‰Hô ˜2Ÿ8™8 A™;Ó'ò F�Ü%+¨A¨q°"°Q¸°T±(¸B¸qÀ!¸t¹HÓ%EÑ"��1�a�4‘˜"˜Q ˜Tš(ñFñ	FðFô* ”�a—g‘g˜a‘jÓ!Ó"€DÜ
�qœ"Ÿ(™( 4¬r¯x©xÔ8¸"Ó
=€Cà�ˆ7€Nrf   c                 ó8   — | |z  ||z  z   }| |z  | |z  z   }||fS )zLGivens rotate [a, b].

    [aa] = [ c s] @ [a]
    [bb]   [-s c]   [b]

    r  )r.   rÁ  ru  rO   r©  r—  s         rP   rë  rë  ”  s1   € ð ˆA‰#��!‘‰)€BØ
ˆˆA‰��!‘‰€BØˆrˆ6€Mrf   c                 óÂ  — | j                   }|j                  \  }}| j                  }|j                  d   |j                  d   k(  sJ ‚t        j                  |d| «      }||dz
     ||dz
  df   z  ||dz
  df<   t        |dz
  dd«      D ]P  }t        |||z
  «      }||d|…df   ||dz   ||z   …df   z  j                  d¬«      }	||   |	z
  ||df   z  ||df<   ŒR |S )z€Backsubsitution solve upper triangular banded `R @ c = y.`

    `R` is in the "packed" format: `R[i, :]` is `a[i, i:i+k+1]`
    r   Nr)   .r4   r2   r  )ru  r™   rÝ  rF   rÉ   rÈ   rá  r¸  )
ró  r‹   rð  r«   rï  rÝ  r.   r÷   rä  Úsumms
             rP   Úfpbackrø     s  € ð
 	�‰€AØ�G‰G�E€A€rØ	�‰€BØ�7‰7�1‰:˜Ÿ™ ™Ò#Ð#Ð#ä
�‰�a˜˜�fÓ€AØ�R˜‘T‘7˜Q˜r !™t Q˜w™ZÑ'€A€bˆ�dˆC€i�LÜ�2�a‘4˜˜RÓ ò .ˆÜ�"�b˜‘d‹mˆà�!�Q�s�U˜D�.Ñ! A a¨¡c¨!¨C©% i° nÑ$5Ñ5×:Ñ:ÀÐ:ÓBˆØ˜‘d˜T‘k a¨¨1¨¡gÑ-ˆˆ!ˆSˆ&Š	ð	.ð
 €Hrf   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestGivensQRc                 ó|   — d}t        j                  |t        ¬«      }|dz  dd|z   z  z   }t        ||«      }||||fS )Nr6   r@   r)   )rF   rJ   ro  r   )rM   rN   r/   rm   r‹   r-   s         rP   Ú_get_xytzTestGivensQR._get_xyt·  sF   € ØˆÜ�I‰I�aœuÔ%ˆØˆq‰D�1�a˜‘c‘7‰NˆÜ˜˜1ÓˆØ�!�Q˜ˆzÐrf   c                 ó<  — d}| j                  |«      \  }}}}t        j                  |||«      }t        j                  |j                  «       «      \  }}|j                  |z  }	|j                  \  }
}||j                  d   |z
  dz
  k(  sJ ‚|j                  d d |dz   …   }t        j                  |t        j                  ¬«      }|j                  j                  |
|dz   «      }t        |||«      }|d d …d f   }t        j                   ||||«       t#        t        j$                  |j                  «       |z   |j                  «       |z
  «      t        j&                  |«      d¬«       t#        t        j$                  t)        |	|d d …df   z
  «      t)        |	|d d …df   z   «      «      t        j&                  |	«      d¬«       t        j*                  ||	«      }t        j,                  |j.                  |j0                  |«      }t#        ||d d …df   d¬«       y )	Nr^   r   r)   r@   rS   rk   g‚vIhÂ%L=çê-�™—a=)rü  r   r)  r”  r   rå  r›  r™   ÚindicesrF   Úascontiguousarrayrì  Údatart   rÛ  r%   Ú	qr_reducer   ÚminimumrÉ   ÚabsrŒ  rø  ru  rÝ  )rM   rN   rm   r‹   r-   r/   Úa_csrÚqrc  ÚqTyr}  rÝ  rˆ  r•  rð  Úy_Úc_fullÚc_bandeds                     rP   Útest_vs_fullzTestGivensQR.test_vs_full¾  sÄ  € ØˆØ—]‘] 1Ó%‰
ˆˆ1ˆa�ô ×%Ñ% a¨¨AÓ.ˆô �u‰u�U—]‘]“_Ó%‰ˆˆ1Ø�c‰c�A‰gˆð —‘‰ˆˆ2Ø�Q—W‘W˜Q‘Z !‘^ aÑ'Ò'Ð'Ð'à—‘™w ! A¡#˜wÑ'ˆÜ×%Ñ% f´B·H±HÔ=ˆØ�J‰J×Ñ˜q ! A¡#Ó&ˆä˜˜F BÓ'ˆØŠq�$ˆw‰ZˆÜ×Ñ˜1˜f b¨"Ô-ô 	œŸ
™
 1§9¡9£;°¡?Ø#$§9¡9£;°¡?ó4Ü57·]±]À1Ó5EÈEõ	SäœŸ
™
¤3 s¨R²°1°©X¡~Ó#6Ü#& s¨R²°1°©X¡~Ó#6ó8Ü9;¿¹ÀsÓ9KÐRWõ	Yô —‘˜!˜SÓ!ˆÜ—?‘? 1§3¡3¨¯©¨bÓ1ˆÜ˜ ª¨A¨¡°UÖ;rf   c                 óº  — d}| j                  |«      \  }}}}t        j                  |||«      }|j                  \  }}||j                  d   |z
  dz
  k(  sJ ‚|j                  d d |dz   …   }	t        j                  |	t
        j                  ¬«      }	|j                  j                  ||dz   «      }
t        |
|	|«      }|d d …d f   }t        ||«      \  }}t        j                  |
|	||«       t        |j                  |j                  d¬«       t!        |j"                  |j"                  d¬«       |j$                  |j$                  k(  sJ ‚t        ||d¬«       y )	Nr^   r   r)   r@   rS   rk   F)Úcheck_dtype)rü  r   r)  r™   rÿ  rF   r   rì  r  rt   rÛ  rô  r%   r  r   ru  r   rˆ  rÝ  )rM   rN   rm   r‹   r-   r/   r  r}  rÝ  rˆ  r•  rð  r  ÚRRr·   s                  rP   Útest_py_vs_compiledz TestGivensQR.test_py_vs_compiledá  s,  € àˆØ—]‘] 1Ó%‰
ˆˆ1ˆa�ô ×%Ñ% a¨¨AÓ.ˆØ—‘‰ˆˆ2Ø�Q—W‘W˜Q‘Z !‘^ aÑ'Ò'Ð'Ð'à—‘™w ! A¡#˜wÑ'ˆÜ×%Ñ% f´B·H±HÔ=ˆØ�J‰J×Ñ˜q ! A¡#Ó&ˆä˜˜F BÓ'ˆØŠq�$ˆw‰Zˆä˜q "Ó%‰ˆˆBÜ×Ñ˜1˜f b¨2Ô.ä˜Ÿ™˜aŸc™c¨Õ.Ü˜Ÿ	™	 1§8¡8¸Õ?Ø�u‰u˜Ÿ™Š}Ðˆ}Ü˜˜B UÖ+rf   c                 ó6  — d}| j                  |«      \  }}}}t        j                  d|dz   t        ¬«      }t	        j
                  ||||«      \  }}}	|j                  d   }
t        j                  |||«      }||d d …d f   z  j                  «       }|j                  j                  |
|dz   f«      }|j                  d d |dz   …   j                  t        j                  «      }t        ||d¬«       t!        ||«       |	|j                  d   |z
  dz
  k(  sJ ‚y )Nr^   r)   r@   r   rS   rk   )rü  rF   rJ   ro  r%   Údata_matrixr™   r   r)  Útocsrr  rt   rÿ  rS  rì  r   r   )rM   rN   rm   r‹   r-   r/   r­  r•  rˆ  rÝ  r}  r  Úa_wÚA_Úoffset_s                  rP   Útest_data_matrixzTestGivensQR.test_data_matrixü  s  € ØˆØ—]‘] 1Ó%‰
ˆˆ1ˆa�Ü�I‰I�a˜˜1™¤EÔ*ˆä ×,Ñ,¨Q°°1°aÓ8‰ˆˆ6�2à�G‰G�A‰JˆÜ×%Ñ% a¨¨AÓ.ˆØ�qš˜D˜‘zÑ!×(Ñ(Ó*ˆØ�X‰X×Ñ˜q ! A¡#˜hÓ'ˆØ—+‘+™g  1¡˜gÑ&×-Ñ-¬b¯h©hÓ7ˆä˜˜2 EÕ*Ü˜ Ô(Ø�Q—W‘W˜Q‘Z !‘^ aÑ'Ò'Ð'Ñ'rf   c                 ón  — d}| j                  |«      \  }}}}t        j                  ||dz  f   }t        j                  |||t        j
                  |«      «      \  }}}t        |||«      }	t        j                  ||||«       t        |	|«      }
t        j                  |||«      }t        ||
d¬«       y )Nr^   r4   rj   rk   )
rü  rF   rí   r%   r  ra   rÛ  r  rø  r   )rM   rN   rm   r‹   r-   r/   r•  rˆ  rÝ  rð  r.   rÝ   s               rP   Útest_fpbackzTestGivensQR.test_fpback  s¡   € ØˆØ—]‘] 1Ó%‰
ˆˆ1ˆa�Ü�E‰E�!�Q˜‘T�'‰NˆÜ ×,Ñ,¨Q°°1´b·l±lÀ1³oÓF‰ˆˆ6�2Ü˜˜F BÓ'ˆÜ×Ñ˜1˜f b¨!Ô,ä�1�a‹LˆÜ�_‰_˜Q  AÓ&ˆä˜˜A EÖ*rf   N)r  r	  r
  rü  r  r  r  r  r  rf   rP   rú  rú  ´  s   „ òò!<òF,ò6(ó"+rf   rú  c                 óÀ   — t         j                  j                  t         j                  j                  t         j                  j	                  t
        «      «      d| «      S )Nr  )ÚosÚpathra  ÚabspathÚdirnameÚ__file__)Úbasenames    rP   Ú	data_filer     s8   € Ü�7‰7�<‰<œŸ™Ÿ™¬¯©¯©¼Ó(AÓBØ ó*ð *rf   c                   ó`   — e Zd Zd„ Zd„ Zd„ Zej                  j                  d«      d„ «       Z	y)ÚTestSmoothingSplinec                 ó0  — t         j                  j                  d«      }d}t        j                  |j	                  |«      dz  dz
  «      }|dz  t        j
                  d|z  «      z  |dz  z   |j                  dd|«      z   }t        t        «      5  t        ||dd  «       d d d «       t        t        «      5  t        |dd  |«       d d d «       t        t        «      5  t        |j                  d|«      |«       d d d «       t        t        «      5  t        |d d d	…   |«       d d d «       t        j                  |«      }|d   |d
<   t        t        «      5  t        ||«       d d d «       t        j                  d«      }t        j                  d«      }d}t        j                  t        |¬«      5  t        ||«       d d d «       y # 1 sw Y   �Œ-xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒëxY w# 1 sw Y   ŒÍxY w# 1 sw Y   Œ˜xY w# 1 sw Y   y xY w)Nr…   rŽ   r7   r4   r6   r8   ró   r)   r2   r   z)``x`` and ``y`` length must be at least 5rç  )rF   rL   rˆ   r‰   r&  rq  ÚnormalrB   rD   r   rt   rÞ  rJ   rŸ  rZ   r   )rM   rŠ   rN   rm   r‹   Úx_duplÚexception_messages          rP   Útest_invalid_inputz&TestSmoothingSpline.test_invalid_input$  sÉ  € Ü�i‰i×#Ñ# DÓ)ˆØˆÜ�G‰G�C×%Ñ% aÓ(¨1Ñ,¨qÑ0Ó1ˆØˆq‰D”2—6‘6˜!˜a™%“=Ñ  1 a¡4Ñ'¨#¯*©*°R¸¸aÓ*@Ñ@ˆô œ:Ó&ñ 	,Ü! ! Q q r UÔ+÷	,äœ:Ó&ñ 	,Ü! ! A B %¨Ô+÷	,äœ:Ó&ñ 	6Ü! !§)¡)¨A¨q£/°1Ô5÷	6ô œ:Ó&ñ 	.Ü! !¡D b D¡'¨1Ô-÷	.ô —‘˜“ˆØ˜1‘Iˆˆq‰	äœ:Ó&ñ 	-Ü! &¨!Ô,÷	-ô �I‰I�a‹LˆÜ�G‰G�A‹JˆØGÐÜ�]‰]œ:Ð->Ô?ñ 	(Ü! ! QÔ'÷	(ð 	(÷+	,ñ 	,ú÷	,ñ 	,ú÷	6ð 	6ú÷	.ð 	.ú÷	-ð 	-ú÷	(ð 	(úsH   ÂGÂ:GÃ!G(ÄG4ÅH Æ8HÇGÇG%Ç(G1Ç4G=È H	ÈHc                 óÌ   — t        j                  t        d«      «      5 }|d   }|d   }|d   }ddd«        t        «      |«      }t	        |ddd¬«       y# 1 sw Y   Œ,xY w)	ae  
        Data is generated in the following way:
        >>> np.random.seed(1234)
        >>> n = 100
        >>> x = np.sort(np.random.random_sample(n) * 4 - 2)
        >>> y = np.sin(x) + np.random.normal(scale=.5, size=n)
        >>> np.savetxt('x.csv', x)
        >>> np.savetxt('y.csv', y)

        We obtain the result of performing the GCV smoothing splines
        package (by Woltring, gcvspl) on the sample data points
        using its version for Octave (https://github.com/srkuberski/gcvspl).
        In order to use this implementation, one should clone the repository
        and open the folder in Octave.
        In Octave, we load up ``x`` and ``y`` (generated from Python code
        above):

        >>> x = csvread('x.csv');
        >>> y = csvread('y.csv');

        Then, in order to access the implementation, we compile gcvspl files in
        Octave:

        >>> mex gcvsplmex.c gcvspl.c
        >>> mex spldermex.c gcvspl.c

        The first function computes the vector of unknowns from the dataset
        (x, y) while the second one evaluates the spline in certain points
        with known vector of coefficients.

        >>> c = gcvsplmex( x, y, 2 );
        >>> y0 = spldermex( x, c, 2, x, 0 );

        If we want to compare the results of the gcvspl code, we can save
        ``y0`` in csv file:

        >>> csvwrite('y0.csv', y0);

        z
gcvspl.npzrm   r‹   Úy_GCVSPLNg-Cëâ6?F)rU   rV   r  )rF   Úloadr   r   r   )rM   r  rm   r‹   r)  Úy_comprs         rP   Útest_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPLC  sq   € ôR �W‰W”Y˜|Ó,Ó-ð 	(°à�S‘	ˆAØ�S‘	ˆAà˜JÑ'ˆH÷	(ð .Ô'¨¨1Ó-¨aÓ0ˆô 	˜ °¸4ÈUÖS÷	(ð 	(ús   ŸAÁA#c                 ó¸  — t         j                  j                  d«      }d}t        j                  |j	                  |«      dz  dz
  «      }|dz  t        j
                  d|z  «      z  |dz  z   |j                  dd|«      z   }t        ||d¬«      }t        ||dd	¬
«      }t        j                  |d   |d   d|z  «      }t         ||«       ||«      d¬«       y)z–
        In case the regularization parameter is 0, the resulting spline
        is an interpolation spline with natural boundary conditions.
        r…   rŽ   r7   r4   r6   r8   ró   )Úlamr0  rG  r   r2   rS   rk   N)rF   rL   rˆ   r‰   r&  rq  r$  r   r
   r`   r   )rM   rŠ   rN   rm   r‹   Ú
spline_GCVÚspline_interpÚgrids           rP   Útest_non_regularized_casez-TestSmoothingSpline.test_non_regularized_case{  sË   € ô �i‰i×#Ñ# DÓ)ˆØˆÜ�G‰G�C×%Ñ% aÓ(¨1Ñ,¨qÑ0Ó1ˆØˆq‰D”2—6‘6˜!˜a™%“=Ñ  1 a¡4Ñ'¨#¯*©*°R¸¸aÓ*@Ñ@ˆä*¨1¨a°RÔ8ˆ
Ü*¨1¨a°¸IÔFˆä�{‰{˜1˜Q™4  2¡¨¨A©Ó.ˆÜ™
 4Ó(Ù% dÓ+Ø"ö	$rf   r4   c                 óJ  — t         j                  j                  d«      }d}t        j                  |j	                  |«      dz  dz
  «      }|dz  t        j
                  d|z  «      z  |dz  z   |j                  dd|«      z   }t        ||«      }|j                  t        d«      d¬	«      D ]u  }t        j                  |«      }d
||<   t        |||«      }t         |||   «      ||   z
  «      }	t         |||   «      ||   z
  «      }
|	|
k  sŒdt        d|	d›d|
d›�«      ‚ y )Nr…   rŽ   r7   r4   r6   r8   ró   r^   r•   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rF   rL   rˆ   r‰   r&  rq  r$  r   ÚchoicerÈ   rŸ  r  rD   )rM   rŠ   rN   rm   r‹   r  Úindr­  Úspl_wÚorigÚweighteds              rP   Útest_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_splineŽ  s.  € ô �i‰i×#Ñ# DÓ)ˆØˆÜ�G‰G�C×%Ñ% aÓ(¨1Ñ,¨qÑ0Ó1ˆØˆq‰D”2—6‘6˜!˜a™%“=Ñ  1 a¡4Ñ'¨#¯*©*°R¸¸aÓ*@Ñ@ˆä# A qÓ)ˆð —:‘:œe C›j¨r�:Ó2ò 	3ˆCÜ—‘˜“
ˆAØˆAˆc‰FÜ)¨!¨Q°Ó2ˆEô ‘s˜1˜S™6“{ Q s¡VÑ+Ó,ˆDÜ™5  3¡›=¨1¨S©6Ñ1Ó2ˆHà�h‹Ü ð $CØCGÈÀ)È3Ø$,¨R =ð"2ó 3ð 3ñ	3rf   N)
r  r	  r
  r'  r,  r2  rZ   rh  Ú	fail_slowr9  r  rf   rP   r"  r"     s6   „ ò(ò>6Tòp$ð& ‡[�[×Ñ˜1Óñ3ó ñ3rf   r"  c           	      ó   ‡‡‡‡‡‡	‡
— | \  Š	Š
|\  ŠŠt        ‰«      ‰z
  dz
  }|‰dz   k\  sJ ‚t        ‰«      ‰z
  dz
  Š‰‰dz   k\  sJ ‚t        ˆˆˆˆˆˆ	ˆ
fd„t        |«      D «       «      }t        j                  |«      S )z-A naive 2D tensort product spline evaluation.r)   c           	   3   óˆ   •K  — | ]9  }t        ‰«      D ])  }‰||f   t        ‰‰|‰«      z  t        ‰	‰|‰«      z  –— Œ+ Œ; y ­wr´  )rÈ   r  )
rµ  ÚixÚiyr.   r/   ÚnyÚtxÚtyrm   r‹   s
      €€€€€€€rP   r¶  zbspline2.<locals>.<genexpr>³  sU   øè ø€ ò 7Ø¬E°"«Iò7Ø&(ð ��B�‰iœ!˜A˜q " b›/Ñ)¬A¨a°°B¸«OÕ;ð 7Ð;ñ 7ùs   ƒ?A)r(  r¸  rÈ   rF   rs   )r½   r-   r.   r/   Únxr  r?  r@  rA  rm   r‹   s     ``  @@@@@rP   Úbspline2rC  «  s…   þ€ à�D€A€qØ�F€BˆÜ	ˆR‹�1‰�q‰€BØ�!�A‘#ŠIÐˆIÜ	ˆR‹�1‰�q‰€BØ�!�A‘#ŠIÐˆIÜ
÷ 7ñ 7Ü˜b›	ô7ó 7€Cä�:‰:�c‹?Ðrf   c                 ób  — |dk(  r||   | cxk  r||dz      k  rdS  dS |||z      ||   k(  rd}n)| ||   z
  |||z      ||   z
  z  t        | |dz
  ||«      z  }|||z   dz      ||dz      k(  rd}||z   S |||z   dz      | z
  |||z   dz      ||dz      z
  z  t        | |dz
  |dz   |«      z  }||z   S )Nr   r)   r+   r8   ©r  r¯  s         rP   r  r  ¸  sþ   € ØˆA‚vØ˜‘d˜aÔ( ! A a¡C¡&Ò(ˆsÐ1Ð(¨cÐ1Øˆˆ1‰�v��1‘‚~Ø‰à�!�A‘$‰h˜˜1˜Q™3™ ! A¡$™Ñ'¬!¨A¨q°©s°A°q«/Ñ9ˆØˆˆ1‰ˆQ‰�x�1�Q�q‘S‘6ÒØˆð �‰7€Nð ��!‘�A‘‰h˜‰l˜Q˜q ™s 1™u™X¨¨!¨A©#©Ñ.Ñ/´!°A°q¸±s¸A¸a¹CÀÓ2CÑCˆØ�‰7€Nrf   c                 óœ   ‡ ‡‡‡— t        ‰«      ‰z
  dz
  }|‰dz   k\  rt        ‰«      |k\  sJ ‚t        ˆˆˆˆ fd„t        |«      D «       «      S )Nr)   c              3   óF   •K  — | ]  }‰|   t        ‰‰|‰«      z  –— Œ y ­wr´  rE  r»  s     €€€€rP   r¶  zbspline.<locals>.<genexpr>É  s$   øè ø€ Ò6¨ˆq�‰t”a˜˜1˜a “mÕ#Ñ6ùr¼  r½  r¾  s   ```` rP   r:  r:  Æ  sD   û€ ÜˆA‹�‰
�Q‰€AØ��1‘ŠHœ3˜q›6 Qš;Ð'Ð'ÜÖ6¬U°1«XÔ6Ó6Ð6rf   c                   ó   — e Zd Zdd„Zd„ Zy)Ú
NdBSpline0c                 óú   — t        |«      }|t        |j                  «      k  sJ ‚	 t        |«       t        d„ |D «       «      | _        t        d„ |D «       «      | _        || _        y# t        $ r	 |f|z  }Y ŒGw xY w)a¯  Tensor product spline object.

        c[i1, i2, ..., id] * B(x1, i1) * B(x2, i2) * ... * B(xd, id)

        Parameters
        ----------
        c : ndarray, shape (n1, n2, ..., nd, ...)
            b-spline coefficients
        t : tuple of 1D ndarrays
            knot vectors in directions 1, 2, ... d
            ``len(t[i]) == n[i] + k + 1``
        k : int or length-d tuple of integers
            spline degrees.
        c              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­wr´  )ÚoperatorÚindex)rµ  Úkis     rP   r¶  z&NdBSpline0.__init__.<locals>.<genexpr>å  s   è ø€ Ò6¨b”x—~‘~ b×)Ñ6ùs   ‚!c              3   óR   K  — | ]  }t        j                  |t        ¬ «      –— Œ! y­w)r@   N)rF   rs   ro  )rµ  Útis     rP   r¶  z&NdBSpline0.__init__.<locals>.<genexpr>æ  s   è ø€ Ò?°r”r—z‘z "¬E×2Ð2Ñ?ùs   ‚%'N)r(  r™   rC   r  r/   r-   r.   )rM   r-   r.   r/   r  s        rP   rÞ  zNdBSpline0.__init__Í  sx   € ô �1‹vˆØ”s˜1Ÿ7™7“|Ò#Ð#Ð#ð	Ü�ŒFô
 Ñ6°AÔ6Ó6ˆŒÜÑ?¸QÔ?Ó?ˆŒØˆ�øô ò 	à��T‘	ŠAð	ús   §A( Á(A:Á9A:c                 ób  — t        | j                  «      }t        |«      |k(  sJ ‚dg|z  }t        |«      D ]Œ  }| j                  |   ||   }}| j                  |   }|||   k(  r|||<   nt	        j
                  ||«      dz
  ||<   |||      |cxk  r|||   dz      k  sJ ‚ J ‚||   |k\  r||   t        |«      |z
  k  rŒŒJ ‚ t        |«      }d}t        |«      D �cg c]'  }t        ||   | j                  |   z
  ||   dz   «      ‘Œ) }	}t        j                  |	Ž D ]o  }
| j                  |
   t	        j                  t        |«      D �cg c]0  }t        ||   | j                  |   |
|   | j                  |   «      ‘Œ2 c}«      z  }||z  }Œq t	        j                  |«      S c c}w c c}w )NÚnoner)   r   )r(  r-   rÈ   r/   rF   r·  r  Ú	itertoolsÚproductr.   Úprodr  rs   )rM   rm   r  r÷   r�  ÚtdÚxdr/   ÚresultÚitersÚidxÚterms               rP   Ú__call__zNdBSpline0.__call__é  sÈ  € Ü�4—6‘6‹{ˆä�1‹v˜Š~Ðˆ~ð ˆJ�t‰OˆÜ�t“ò 
	4ˆAØ—V‘V˜A‘Y  !¡�ˆBØ—‘�q‘	ˆAð �R˜‘UŠ{Ø��!’ä—‘ r¨2Ó.°Ñ2��!‘Ø�a˜‘d‘8˜rÔ/ R¨¨!©¨Q©¡ZÒ/Ð/Ñ/Ð/Ð/Ø�Q‘4˜1’9  1¡¬¨B«°!©Ó!3Ð3Ð3ð
	4ô �!‹Hˆð
 ˆÜ<AÀ$»KÖH°q”�q˜‘t˜dŸf™f Q™iÑ'¨¨1©°©Õ2ÐHˆÐHÜ×$Ñ$ eÐ,ò 	ˆCØ—6‘6˜#‘;¤§¡Ü38¸³;ö*@Ø./ô +,¨A¨a©D°$·&±&¸±)¸SÀ¹VÀTÇVÁVÈAÁYÕ*Oò *@ó "Añ AˆDà�d‰N‰Fð	ô �z‰z˜&Ó!Ð!ùò Iùò*@s   Ã ,F'Å5F,N©r6   )r  r	  r
  rÞ  r\  r  rf   rP   rI  rI  Ì  s   „ óó8"rf   rI  c                   ó”  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej(                  j+                  dddg«      ej(                  j+                  dddg«      d„ «       «       Zej(                  j+                  dddg«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zej(                  j:                  d„ «       Zy) ÚTestNdBSplinec                 óÞ  — t         j                  j                  d«      }d\  }}d}t        j                  |j	                  ||z   dz   ¬«      «      }|j	                  ||f¬«      }t        |||«      }t        |f||«      }|j	                  d¬«      }	t         ||	d d …d f   «       ||	«      d¬«        ||	d d …d f   «      j                  |	j                  d	   |j                  d   fk(  sJ ‚y )
Nr€  r>   r”   r)   r•   rÝ  rj   rk   r   )	rF   rL   r„  r‰   r…  r   r   r   r™   )
rM   rŠ   rN   r/   Ún_trr-   r.   rO   ÚnbÚxis
             rP   Útest_1DzTestNdBSpline.test_1D	  sÛ   € ä�i‰i×#Ñ# EÓ*ˆØ‰ˆˆ1ØˆÜ�G‰G�C—K‘K Q¨¡U¨Q¡Y�KÓ/Ó0ˆØ�K‰K˜a ˜YˆKÓ'ˆä�A�q˜!ÓˆÜ˜�t˜Q Ó"ˆà�[‰[˜bˆ[Ó!ˆä™˜2ša ˜g™;›Ù˜"› Eõ	+á�"’Q˜�W‘+‹×$Ñ$¨¯©°!©°a·g±g¸a±jÐ(AÒAÐAÑArf   c                 ó  — t        j                  d«      }|dz  }t        ||d¬«      }|dz  d|z  z   }t        ||d¬«      }|j                  |j                  f}|j                  d d …d f   |j                  d d d …f   z  }||dfS )Nr“   r6   rå   r4   ©rF   rJ   r
   r-   r.   ©rM   rm   r‹   r  Úy_1ru  Út2r±  s           rP   Úmake_2d_casezTestNdBSpline.make_2d_case	  s†   € ä�I‰I�a‹LˆØˆq‰DˆÜ   A¨Ô+ˆà�‰d�Q�q‘S‰jˆÜ" 1 c¨QÔ/ˆà�e‰e�U—W‘WÐˆØ�U‰U’1�d�7‰^˜eŸg™g dªA gÑ.Ñ.ˆà�2�qˆyÐrf   c                 óf  — t        j                  d«      }|dz  }t        ||d¬«      }t        j                  d«      dz   }|dz  d|z  z   }t        ||d¬«      }|j                  |j                  f}|j                  d d …d f   |j                  d d d …f   z  }|||j
                  |j
                  fS )Nr“   r6   rå   r˜   ró   r4   )rF   rJ   r
   r-   r.   r/   rg  s           rP   Úmake_2d_mixedzTestNdBSpline.make_2d_mixed*	  s£   € ä�I‰I�a‹LˆØˆq‰DˆÜ   A¨Ô+ˆä�I‰I�a‹L˜3ÑˆØ�‰d�Q�q‘S‰jˆÜ" 1 c¨QÔ/ˆà�e‰e�U—W‘WÐˆØ�U‰U’1�d�7‰^˜eŸg™g dªA gÑ.Ñ.ˆà�2�s—u‘u˜eŸg™gÐ%Ð%rf   c                 óà  — g d¢}| j                  «       \  }}}|D ��cg c]  \  }}|dz  |dz  d|z  z   z  ‘Œ }}}t        t        j                  |D �cg c]  }t	        ||||«      ‘Œ c}«      t        j                  |«      dd¬«       t        ||d¬«      }	 |	|«      j                  t        |«      fk(  sJ ‚t         |	|«      |d¬«       t        j                  j                  d	«      }
|
j                  d
¬«      dz  } |	|«      }|j                  dk(  sJ ‚|j                  d«      j                  \  }}t        |j                  «       |dz  |dz  d|z  z   z  d¬«       y c c}}w c c}w )N©©ró   r=   )r=   r)   )r¼   ró   r6   r4   Frj   ©r	  rU   rå   rk   r€  )r7   r6   r4   r•   r˜   )r7   r6   )r2   r4   )rj  r   rF   rs   rC  r   r™   r(  rL   r„  r…  rt   r›  Úravel)rM   rc  ri  r±  r/   rm   r‹   Útargetr½   Úbspl2rŠ   rX  s               rP   Útest_2D_separablezTestNdBSpline.test_2D_separable9	  sX  € Ú/ˆØ×%Ñ%Ó'‰	ˆˆB�Ø46×7©&¨1¨a�!�Q‘$˜!˜Q™$  1¡™*Ó%Ð7ˆÑ7ô 	œŸ
™
ÀbÖ#IÀ¤H¨R°°R¸Õ$;Ò#IÓJÜŸ
™
 6Ó*Ø$)Ø"õ	$ô ˜"˜b AÔ&ˆÙ�R‹y�‰¤3 r£7 +Ò-Ð-Ð-Ü™˜b›	Ø Uõ	,ô �i‰i×#Ñ# EÓ*ˆØ�[‰[˜iˆ[Ó(¨1Ñ,ˆÙ�r“ˆØ�|‰|˜vÒ%Ð%Ð%ð �z‰z˜'Ó"×$Ñ$‰ˆˆ1Ü˜Ÿ™›Ø˜1™  1¡ q¨¡s¡
Ñ+°%ö	9ùó- 8ùò $Js   žE%ÁE+c                 óÊ  — d}g d¢}|D ��cg c]  \  }}|dz  |dz  d|z  z   z  ‘Œ }}}| j                  «       \  }}}t        j                  ||||f«      }	d}
t        ||	d¬«      } ||
«      } t        |||«      |
«      }|j                  dk(  sJ ‚t        ||gdz  d¬	«        ||«      j                  t        j                  |«      d d
 |j                  j                  |d  z   k(  sJ ‚t         ||«      t        j                  |«      d d …d f   dd¬«       |	j                  d«      }t        ||d¬«      } ||
«      }|j                  dk(  sJ ‚t        |||g||ggd¬	«        ||«      j                  t        j                  |«      d d
 |j                  j                  |d  z   k(  sJ ‚t         ||«      t        j                  |«      d d …d d f   dd¬«       y c c}}w )Nr4   rn  r6   ro  rå   ©r7   r7   rj   rk   r2   Fg‚vIhÂ%,=rp  ©r“   r“   r4   r4   )r4   r4   )	rj  rF   rî   r   r™   r   r.   rs   rt   )rM   r  rc  rm   r‹   rr  ri  r±  r/   Úc2_4r½   Úbspl2_4rX  Ú
val_singleÚc2_22Úbspl2_22s                   rP   Útest_2D_separable_2z!TestNdBSpline.test_2D_separable_2U	  só  € àˆÚ/ˆØ46×7©&¨1¨a�!�Q‘$˜!˜Q™$  1¡™*Ó%Ð7ˆÑ7à×%Ñ%Ó'‰	ˆˆB�Ü�y‰y˜"˜b " bÐ)Ó*ˆàˆÜ˜B ¨Ô*ˆÙ˜“ˆØ)”Y˜r 2 qÓ)¨"Ó-ˆ
Ø�|‰|˜tÒ#Ð#Ð#Ü˜Ø#˜ qÑ(¨uõ	6ñ
 �r‹{× Ñ ¤B§H¡H¨R£L°°"Ð$5¸¿	¹	¿¹ÈÈÐ8NÑ$NÒNÐNÐNÜ™ ›¤b§j¡j°Ó&8º¸D¸Ñ&AØ$)Ø"õ	$ð
 —‘˜\Ó*ˆÜ˜R ¨!Ô,ˆá˜"“ˆØ�|‰|˜vÒ%Ð%Ð%Ü˜Ø$ jÐ1Ø$ jÐ1ð3Ø9>õ	@ñ ˜“×"Ñ"Ü—‘˜“˜S˜bÐ! H§J¡J×$4Ñ$4°T°UÐ$;Ñ;ò<ð 	=ð <ä™ ›¤b§j¡j°Ó&8º¸DÀ$¸Ñ&GØ$)Ø"ö	$ùóE 8s   ŒGc                 ó’  — g d¢}|D ��cg c]  \  }}|dz  |dz  d|z  z   z  ‘Œ }}}|D �cg c]
  }|d|z  z   ‘Œ }}| j                  «       \  }}}|dz  }t        j                  ||||f«      }	d}
t        ||	d¬«      } ||
«      } t        |||«      |
«      }|j                  dk(  sJ ‚t        ||gd	z  d
¬«       y c c}}w c c}w )Nrn  r6   r4   y               @r¿  ro  rå   rv  r7   rj   rk   )rj  rF   rî   r   r™   r   )rM   rc  rm   r‹   rr  r-   ri  r±  r/   rx  r½   ry  rX  rz  s                 rP   Útest_2D_separable_2_complexz)TestNdBSpline.test_2D_separable_2_complex€	  sã   € â/ˆØ46×7©&¨1¨a�!�Q‘$˜!˜Q™$  1¡™*Ó%Ð7ˆÑ7à$*Ö+˜q�!�b˜‘d“(Ð+ˆÐ+à×%Ñ%Ó'‰	ˆˆB�Ø�6‰]ˆÜ�y‰y˜"˜b " bÐ)Ó*ˆàˆÜ˜B ¨Ô*ˆÙ˜“ˆØ)”Y˜r 2 qÓ)¨"Ó-ˆ
Ø�|‰|˜tÒ#Ð#Ð#Ü˜Ø#˜ qÑ(¨uö	6ùó 8ùâ+s
   ŠB>¬Cc                 óº  — t         j                  j                  d«      }d}t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  f¬«      }t        ||f||¬	«      }d
}t         ||«      t        |||f||«      d¬«       t         j                  g d¢g d¢f   }t         ||«      |D �cg c]  }t        |||f||«      ‘Œ c}d¬«       y c c}w )Nr€  r6   r   r”   r•   rº   r7   r)   rå   )r+   r+   rj   rk   ©r)   ró   r4   ©çš™™™™™ñ?gš™™™™™ù?çÍÌÌÌÌÌ @)rF   rL   r„  rŸ   r‰   r…  r–   r   r   rC  rí   )	rM   rŠ   r/   r@  rA  r.   r  rc  r½   s	            rP   Útest_2D_randomzTestNdBSpline.test_2D_random“	  sA  € Ü�i‰i×#Ñ# EÓ*ˆØˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆØ�K‰K˜bŸg™g a™i¨™k¨2¯7©7°1©9°Q©;Ð7ˆKÓ8ˆä˜˜R˜ ! qÔ)ˆàˆÜ™˜B›Ü   b¨" X¨q°!Ó4¸5õ	Bô �U‰U’;Ú"ð#ñ $ˆä™˜B›Ø@BÖC¸"œ " r¨2 h°°1Õ5ÒCØ"ö	$ùÚCs   Ä7E
c                 ó  — | j                  «       \  }}}}g d¢}|D ��cg c]  \  }}|dz  |dz  d|z  z   z  ‘Œ }}}t        ||||f¬«      }	 |	|«      j                  t        |«      fk(  sJ ‚t	         |	|«      |d¬«       y c c}}w )N©)çffffffö?r‰  )r=   g333333@)r‰  r”  r6   r4   rå   rj   rk   )rl  r   r™   r(  r   )
rM   ri  r±  ÚkxÚkyrc  rm   r‹   rr  rs  s
             rP   Útest_2D_mixedzTestNdBSpline.test_2D_mixed¦	  s�   € Ø×+Ñ+Ó-‰ˆˆB��BÚ1ˆØ46×7©&¨1¨a�!�Q‘$˜!˜Q™$  1¡™*Ó%Ð7ˆÑ7Ü˜"˜b R¨ HÔ-ˆÙ�R‹y�‰¤3 r£7 +Ò-Ð-Ð-Ü™˜b›	Ø Uö	,ùó 8s   ŸBc                 ó”  — | j                  «       \  }}}}g d¢}t        ||||f¬«      } ||d¬«      }t        ||D ��	cg c]  \  }}	d|dz  z  |	dz  d|	z  z   z  ‘Œ c}	}d¬«        ||d	¬«      }t        ||D ��	cg c]  \  }}	d|dz  z  d|	z  dz   z  ‘Œ c}	}d¬«        ||d
¬«      }t        ||D ��	cg c]  \  }}	|dz  |	dz  d|	z  z   z  ‘Œ c}	}d¬«       t        t        «      5   ||d¬«      }d d d «       t        t        «      5   ||d¬«      }d d d «       y c c}	}w c c}	}w c c}	}w # 1 sw Y   Œ>xY w# 1 sw Y   y xY w)Nr‡  rå   rf  rÆ   r6   r4   rj   rk   ©r)   r)   )r   r   )r2   r   )r2   r   r)   )rl  r   r   rB   rD   )
rM   ri  r±  r‰  rŠ  rc  rs  rÅ   rm   r‹   s
             rP   Útest_2D_derivativez TestNdBSpline.test_2D_derivative¯	  sa  € Ø×+Ñ+Ó-‰ˆˆB��BÚ1ˆÜ˜"˜b R¨ HÔ-ˆá�B˜6Ô"ˆÜ˜Ø;=×>±4°1°a˜˜1˜a™4™ 1 a¡4¨!¨A©#¡:Ó.Ó>ÀUõ	Lñ �B˜6Ô"ˆÜ˜Ø8:×;±°°1˜˜1˜a™4™ 1 Q¡3¨¡7Ó+Ó;À%õ	Iñ �B˜6Ô"ˆÜ˜Ø9;×<±°°A˜˜A™  A¡¨¨!©¡Ó,Ó<À5õ	Jô œ:Ó&ñ 	(á˜˜wÔ'ˆC÷	(ô œ:Ó&ñ 	+á˜˜zÔ*ˆC÷	+ð 	+ùó ?ùó <ùó =÷	(ð 	(ú÷	+ð 	+ús)   ¿D Á<D&Â6D,Ã*D2ÄD>Ä2D;Ä>Ec           
      ó�  — t         j                  j                  d«      }d\  }}t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }|j                  |j                  |z
  d	z
  |j                  |z
  d	z
  f¬«      }t         j                  g d
¢g d¢f   }t        ||f|||f¬«      }t        ||f|||f¬«      }	t         ||«      |D �
cg c]
  }
 |	|
«      ‘Œ c}
d¬«       y c c}
w )Nr€  )r4   r6   r   r”   r•   r6   rº   r7   r)   r�  r‚  rå   rj   rk   )rF   rL   r„  rŸ   r‰   r…  r–   rí   r   rI  r   ©rM   rŠ   r‰  rŠ  r@  rA  r.   rc  rs  Úbspl2_0r  s              rP   Útest_2D_mixed_randomz"TestNdBSpline.test_2D_mixed_randomÈ	  s.  € Ü�i‰i×#Ñ# EÓ*ˆØ‰ˆˆBÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆØ�K‰K˜bŸg™g¨™l¨QÑ.°·±¸"±¸qÑ0@ÐAˆKÓBˆä�U‰U’;Ú"ð#ñ $ˆô ˜2˜r˜( A¨"¨b¨Ô2ˆÜ˜b "˜X q¨R°¨HÔ5ˆä™˜b›	Ø/1Ö2¨™ �Ò2¸ö	@ùÚ2s   Ä*E
c                 óø  — t        j                  d«      }t        j                  d«      dz   }t        ||dz  d¬«      }t        ||dz  d|z  z   d¬«      }|j                  d d …d f   |j                  d d d …f   z  }t	        |j
                  |j
                  f||j                  |j                  f«      }|dz  d d …d f   |dz  d|z  z   d d d …f   z  }t        ||f|«      }t        j                  ||«      D �	�
cg c]	  \  }	}
|	|
f‘Œ }}	}
 ||«      }t        j                  |«      j                  «       rJ ‚t        | ||«      d¬«       t        |j                  |j                  «      |d¬«       y c c}
}	w )	Nr“   r”   ró   r6   rå   r4   rj   rk   )rF   rJ   r
   r.   r   r-   r/   r   rS  rT  r¶   Úanyr   rt   r™   )rM   rm   r‹   Úspl_xÚspl_yrÝ   rv   ÚvaluesÚrgiru  rO   rc  Úbxis                rP   Útest_tx_neq_tyzTestNdBSpline.test_tx_neq_tyØ	  sM  € ä�I‰I�a‹LˆÜ�I‰I�a‹L˜3Ñˆä" 1 a¨¡d¨aÔ0ˆÜ" 1 a¨¡d¨Q¨q©S¡j°AÔ6ˆØ�W‰W’Q˜�WÑ §¡¨ªa¨Ñ 0Ñ0ˆÜ˜%Ÿ'™' 5§7¡7Ð+¨R°%·'±'¸5¿7¹7Ð1CÓDˆà�Q‘$š˜4˜‘ A q¡D¨1¨Q©3¡J°²a°Ñ#8Ñ8ˆÜ% q¨! f¨fÓ5ˆä!*×!2Ñ!2°1°aÓ!8×9™˜˜Aˆq�!ŠfÐ9ˆÑ9Ù�2‹hˆä—8‘8˜C“=×$Ñ$Ô&Ð&Ð&Ü˜™S ›W¨5Õ1Ü˜Ÿ™ F§L¡LÓ1°6ÀÖFùó :s   Ã<E6c                 óˆ  — t        j                  d«      }|dz  }t        ||d¬«      }|dz  d|z  z   }t        ||d¬«      }|dz  d|z  z   dz   }t        ||d¬«      }|j                  |j                  |j                  f}|j                  d d …d d f   |j                  d d d …d f   z  |j                  d d d d …f   z  }	||	dfS )Nr“   r6   rå   r4   r)   rf  )
rM   rm   r‹   r  rh  ru  Úy_2r×  ri  r±  s
             rP   Úmake_3d_casezTestNdBSpline.make_3d_caseì	  sÐ   € ä�I‰I�a‹LˆØˆq‰DˆÜ   A¨Ô+ˆà�‰d�Q�q‘S‰jˆÜ" 1 c¨QÔ/ˆà�‰d�Q�q‘S‰j˜1‰nˆÜ" 1 c¨QÔ/ˆà�e‰e�U—W‘W˜eŸg™gÐ&ˆØ�e‰e’A�t˜T�MÑ"Ø�g‰g�dšA˜t�mÑ$ñ%à�g‰g�d˜D¢!�mÑ$ñ%ˆð �2�qˆyÐrf   c                 ó„  — t         j                  j                  d«      }|j                  d¬«      dz  \  }}}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }| j	                  «       \  }}}t        ||d¬«      }	t        |||«      D �
cg c]  }
|
‘Œ }}
 |	|«      }|j                  d	k(  sJ ‚t        ||d
¬«       y c c}
w )Nr€  ©r6   r?   r•   r˜   r6   r4   r)   rå   )r?   rj   rk   )	rF   rL   r„  r…  r�  r   Úzipr™   r   )rM   rŠ   rm   r‹   rq  rr  Út3Úc3r/   Úbspl3r«   rc  rX  s                rP   Útest_3D_separablezTestNdBSpline.test_3D_separableÿ	  sÉ   € Ü�i‰i×#Ñ# EÓ*ˆØ—+‘+ 7�+Ó+¨aÑ/‰ˆˆ1ˆaØ�A‘˜˜A™  !¡™Ñ$¨¨1©¨q°©s©
°Q©Ñ7ˆà×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b AÔ&ˆä˜Q  1›Ö&�AŠaÐ&ˆÐ&Ù�r“ˆØ�|‰|˜uÒ$Ð$Ð$Ü˜ ¨UÖ3ùò 's   Â
	B=c                 óè  — | j                  «       \  }}}t        ||d¬«      }t        j                  j	                  d«      }|j                  d¬«      dz  \  }}}t        |||«      D �	cg c]  }	|	‘Œ }
}	t         ||
d¬«      d|d	z  z  |dz  d	|z  z   z  |dz  d|z  z   d
z   z  d¬«       t         ||
d¬«      d|z  |dz  d	|z  z   z  |dz  d|z  z   d
z   z  d¬«       t         ||
d¬«      d|z  d|d	z  z  d	z   z  |dz  d|z  z   d
z   z  d¬«       t         ||
d¬«      d|z  d|d	z  z  d	z   z  dz  d¬«       t         ||
d¬«      t        j                  t        |
«      «      d¬«       y c c}	w )Nr6   rå   r€  rŸ  r•   r˜   )r)   r   r   rÆ   r4   r)   rj   rk   )r4   r   r   r“   )r4   r)   r   )r4   r)   r6   )r4   r)   r7   )
r�  r   rF   rL   r„  r…  r   r   r  r(  )rM   r¡  r¢  r/   r£  rŠ   rm   r‹   rq  r«   rc  s              rP   Útest_3D_derivativez TestNdBSpline.test_3D_derivative
  s•  € Ø×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b AÔ&ˆÜ�i‰i×#Ñ# EÓ*ˆØ—+‘+ 7�+Ó+¨aÑ/‰ˆˆ1ˆaÜ˜Q  1›Ö&�AŠaÐ&ˆÐ&ä™˜b YÔ/Ø˜!˜Q™$™ ! Q¡$¨¨1©¡*Ñ-°°A±¸¸!¹±¸a±Ñ@Àuõ	Nô 	™˜b YÔ/Ø˜!™˜q !™t a¨¡c™zÑ*¨a°©d°Q°q±S©j¸1©nÑ=ÀEõ	Kô 	™˜b YÔ/Ø˜!™˜q  A¡™v¨™zÑ*¨a°©d°Q°q±S©j¸1©nÑ=ÀEõ	Kô 	™˜b YÔ/Ø˜!™˜q  A¡™v¨™zÑ*¨aÑ0°uõ	>ô 	™˜b YÔ/ÜŸ™¤ R£Ó)°ö	7ùò 's   Á*	E/c           
      ój  — t         j                  j                  d«      }d}t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f¬«      }t        |||f||¬	«      }t        |||f||¬	«      }d
}	t         ||	«       ||	«      d¬«       t         j                  g d¢g d¢g d¢f   }	t         ||	«      |	D �
cg c]
  }
 ||
«      ‘Œ c}
d¬«       y c c}
w )Nr€  r6   r   r”   r•   rº   r7   r)   rå   )r+   r+   r)   rj   rk   r�  r‚  ©gÍÌÌÌÌÌì?rˆ  gffffffþ?)rF   rL   r„  rŸ   r‰   r…  r–   r   rI  r   rí   )rM   rŠ   r/   r@  rA  Útzr.   r  Úspl_0rc  r  s              rP   Útest_3D_randomzTestNdBSpline.test_3D_random"
  s„  € Ü�i‰i×#Ñ# EÓ*ˆØˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆØ�K‰K˜bŸg™g a™i¨™k¨2¯7©7°1©9°Q©;¸¿¹À¹	À!¹ÐDˆKÓEˆä˜˜R ˜ a¨1Ô-ˆÜ˜B  B˜<¨¨aÔ0ˆàˆÜ™˜B›¡ r£°Õ7ä�U‰U’;Ú"Ú"ð#ñ $ˆô 	™˜B›°bÖ!9°¡%¨¥)Ò!9ÀÖFùÒ!9s   ÆF0
c           
      ó   — t         j                  j                  d«      }d}t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f¬«      |j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f¬«      d	z  z   }t        |||f||¬
«      }t        |||f|j                  |¬
«      }t        |||f|j                  |¬
«      }	t         j                  g d¢g d¢g d¢f   }
t         ||
«       ||
«      d	 |	|
«      z  z   d¬«       y )Nr€  r6   r   r”   r•   rº   r7   r)   r*   rå   r�  r‚  r¨  rj   rk   )rF   rL   r„  rŸ   r‰   r…  r–   r   rÛ   rÜ   rí   r   )rM   rŠ   r/   r@  rA  r©  r.   r  r˜  r™  rc  s              rP   Útest_3D_random_complexz$TestNdBSpline.test_3D_random_complex5
  sÐ  € Ü�i‰i×#Ñ# EÓ*ˆØˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆØ�[‰[˜rŸw™w q™y¨™{¨B¯G©G°A©I°a©K¸¿¹À¹À1¹ÐEˆ[ÓFØ�[‰[˜rŸw™w q™y¨™{¨B¯G©G°A©I°a©K¸¿¹À¹À1¹ÐEˆ[ÓFÀrÑIñJˆô ˜˜R ˜ a¨1Ô-ˆÜ˜B  B˜<¨¯©°1Ô5ˆÜ˜B  B˜<¨¯©°1Ô5ˆä�U‰U’;Ú"Ú"ð#ñ $ˆô 	™˜B›Ù˜r›
 R©¨r«
¡]Ñ2¸ö	@rf   Ú
cls_extrapNTÚcall_extrapc                 óR  — | j                  «       \  }}}t        ||d|¬«      }g d¢g d¢g d¢}	}}t        t        j                  |||	f«      \  }}}	t        |||	«      D �
cg c]  }
|
‘Œ }}
|dz  |dz  d|z  z   z  |	dz  d|	z  z   dz   z  } |||¬«      }t        ||d	¬
«       y c c}
w ©Nr6   )r/   rr   )éþÿÿÿr2   r”   )r  rñ   rn  )r2   g      ø¿ç      @r4   r)   rq   rj   rk   ©r�  r   r™  rF   rs   r   r   )rM   r®  r¯  r¡  r¢  r/   r£  rm   r‹   rq  r«   rc  rr  rX  s                 rP   Útest_extrapolate_3D_separablez+TestNdBSpline.test_extrapolate_3D_separableH
  sº   € ð ×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b A°:Ô>ˆò š²ˆaˆ1ˆÜ”b—j‘j 1 a¨ )Ó,‰ˆˆ1ˆaÜ˜Q  1›Ö&�AŠaÐ&ˆÐ&Ø�A‘˜˜A™  !¡™Ñ$¨¨1©¨q°©s©
°Q©Ñ7ˆá�r {Ô3ˆÜ˜ ¨UÖ3ùò	 's   Á 	B$r¬   )FT)TNc                 ó\  — | j                  «       \  }}}|\  }}t        ||d|¬«      }g d¢g d¢g d¢}
}	}t        t        j                  ||	|
f«      \  }}	}
t        ||	|
«      D �cg c]  }|‘Œ }}|dz  |	dz  d|	z  z   z  |
dz  d|
z  z   dz   z  } |||¬«      }t        ||d	¬
«       y c c}w r±  r´  )rM   r¬   r¡  r¢  r/   r®  r¯  r£  rm   r‹   rq  r«   rc  rr  rX  s                  rP   Útest_extrapolate_3D_separable_2z-TestNdBSpline.test_extrapolate_3D_separable_2X
  sÄ   € ð ×%Ñ%Ó'‰	ˆˆB�Ø"(Ñˆ
�KÜ˜"˜b A°:Ô>ˆò š²ˆaˆ1ˆÜ”b—j‘j 1 a¨ )Ó,‰ˆˆ1ˆaÜ˜Q  1›Ö&�AŠaÐ&ˆÐ&Ø�A‘˜˜A™  !¡™Ñ$¨¨1©¨q°©s©
°Q©Ñ7ˆá�r {Ô3ˆÜ˜ ¨UÖ3ùò	 's   Á%	B)c                 óÄ  — | j                  «       \  }}}t        ||d¬«      }g d¢g d¢g d¢}}}t        t        j                  |||f«      \  }}}t        |||«      D �cg c]  }|‘Œ }	}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }
 ||	d¬	«      }t        j                  |d
   «      sJ ‚t        j                  |d   «      sJ ‚t        |dd |
dd d¬«       y c c}w )Nr6   rå   )r²  r)   r”   )r  r¼   rn  )r2   ró   r³  r4   r)   Frq   r   r2   rj   rk   )r�  r   r™  rF   rs   r   r¶   r   )rM   r¡  r¢  r/   r£  rm   r‹   rq  r«   rc  rr  rX  s               rP   Ú#test_extrapolate_false_3D_separablez1TestNdBSpline.test_extrapolate_false_3D_separablei
  sî   € à×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b AÔ&ˆò šnªnˆaˆ1ˆÜ”b—j‘j 1 a¨ )Ó,‰ˆˆ1ˆaÜ˜Q  1›Ö&�AŠaÐ&ˆÐ&Ø�A‘˜˜A™  !¡™Ñ$¨¨1©¨q°©s©
°Q©Ñ7ˆá�r uÔ-ˆÜ�x‰x˜˜q™	Ô"Ð"Ð"Ü�x‰x˜˜r™
Ô#Ð#Ð#Ü˜˜q ˜ f¨Q¨r l¸Ö?ùò 's   Á	Cc           	      ó  — | j                  «       \  }}}t        ||d¬«      }t        j                  ddt        j                  dddt        j                  g«      }t        j                  dddt        j                  dd	d	g«      }t        j                  d
dddt        j                  ddg«      }t        |||«      D �cg c]  }|‘Œ }	}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }
t        j                  |«      t        j                  |«      z  t        j                  |«      z  }t        j                  |
|<    ||	«      }t        j                  ||   «      j                  «       sJ ‚t        ||
d¬«       y c c}w )Nr6   rå   r²  r)   r4   r”   r  r”  rn  r2   r³  rj   rk   )	r�  r   rF   rs   rH   r   r¶   rµ   r   )rM   r¡  r¢  r/   r£  rm   r‹   rq  r«   rc  rr  r²   rX  s                rP   Útest_x_nan_3DzTestNdBSpline.test_x_nan_3Dy
  sD  € à×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b AÔ&ˆô �J‰J˜˜AœrŸv™v q¨!¨Q´·±Ð7Ó8ˆÜ�J‰J˜˜C ¤B§F¡F¨A¨s°CÐ8Ó9ˆÜ�J‰J˜˜C  A¤r§v¡v¨s°CÐ8Ó9ˆÜ˜Q  1›Ö&�AŠaÐ&ˆÐ&Ø�A‘˜˜A™  !¡™Ñ$¨¨1©¨q°©s©
°Q©Ñ7ˆÜ�x‰x˜‹{œRŸX™X a›[Ñ(¬2¯8©8°A«;Ñ6ˆÜ—v‘vˆˆt‰á�r“ˆÜ�x‰x˜˜t™Ó%×)Ñ)Ô+Ð+Ð+Ü˜ ¨UÖ3ùò 's   Â>	E<c           	      ó°  — t         j                  j                  d«      }d\  }}t        j                  |j	                  ddd¬«      «      }t         j
                  |d   f|z  ||d   f|z  f   }t        j                  |j	                  ddd¬«      «      }t         j
                  |d   f|z  ||d   f|z  f   }|d d d…   j                  j                  rJ ‚|d d d…   j                  j                  rJ ‚|j	                  |j                  dz  |z
  d	z
  |j                  dz  |z
  d	z
  f¬
«      }|j                  }|j                  j                  rJ ‚t         j                  g d¢g d¢f   }t        |d d d…   |d d d…   f|||f¬«      }t        |d d d…   |d d d…   f|||f¬«      }	t         ||«      |D �
cg c]
  }
 |	|
«      ‘Œ c}
d¬«       y c c}
w )Nr€  ©r6   r6   r   r7   é   rƒ  r2   r4   r)   r•   r�  r‚  rå   rj   rk   )rF   rL   r„  r‰   r…  rŸ   ÚflagsÚc_contiguousr–   r›  rí   r   rI  r   r�  s              rP   Útest_non_c_contiguousz#TestNdBSpline.test_non_c_contiguous‹
  sÂ  € ä�i‰i×#Ñ# EÓ*ˆØ‰ˆˆBÜ�W‰W�S—[‘[ Q¨Q°R�[Ó8Ó9ˆÜ�U‰U�B�q‘E�8˜B‘;  R¨¡V I¨b¡LÐ0Ñ1ˆÜ�W‰W�S—[‘[ Q¨Q°R�[Ó8Ó9ˆÜ�U‰U�B�q‘E�8˜B‘;  R¨¡V I¨b¡LÐ0Ñ1ˆà‘c˜�c‘7—=‘=×-Ò-Ð-Ð-Ø‘c˜�c‘7—=‘=×-Ò-Ð-Ð-à�K‰K˜bŸg™g q™j¨2™o°Ñ1°2·7±7¸A±:À±?ÀQÑ3FÐGˆKÓHˆØ�C‰CˆØ—7‘7×'Ò'Ð'Ð'ä�U‰U’;Ú"ð#ñ $ˆô ˜2™c ˜c™7 B¡s¨ s¡GÐ,¨a°B¸°8Ô<ˆÜ˜b¡ 1 ™g r©#¨A¨#¡wÐ/°°r¸2°hÔ?ˆä™˜b›	Ø/1Ö2¨™ �Ò2¸ö	@ùÚ2s   Æ:G
c                 óô   — | j                  «       \  }}}t        ||d¬«      }t        d«      D ]  }d||   j                  _        Œ d|j                  _        t        ||d¬«      } |d«       |d«      k(  sJ ‚y )Nr6   rå   Frh   )r�  r   rÈ   r¿  Ú	writeable)rM   r¡  r¢  r/   r£  r÷   Úbspl3_s          rP   Útest_readonlyzTestNdBSpline.test_readonly¤
  sy   € Ø×%Ñ%Ó'‰	ˆˆB�Ü˜"˜b AÔ&ˆä�q“ò 	*ˆAØ$)ˆBˆq‰E�K‰KÕ!ð	*à"ˆ�‰Ôä˜2˜r QÔ'ˆá�YÓ¡6¨)Ó#4Ò4Ð4Ñ4rf   c                 ór  — | j                  «       \  }}}t        j                  g d¢g d¢g«      }t        |||«      j	                  |||«      }t        j                  |||||g«      }|j
                  d   |j
                  d   k(  sJ ‚t        |j                  «       |j                  «       d¬«       t        t        «      5  t        j                  g d¢||gdz  «       d d d «       t        t        d¬«      5  t        j                  d	d
gg||gdz  «       d d d «       y # 1 sw Y   ŒBxY w# 1 sw Y   y xY w)Nrh   )r7   r˜   r“   r   g¼‰Ø—²Òœ<rk   r6   zData and knots*rç  r)   r4   )
r�  rF   rs   r   r)  r™   r   rå  rB   rD   )rM   r¡  r¢  r/   rc  ÚdmÚdm1s          rP   Útest_design_matrixz TestNdBSpline.test_design_matrix°
  s  € Ø×%Ñ%Ó'‰	ˆˆB�ä�Z‰Zš¢IÐ.Ó/ˆÜ�r˜2˜qÓ!×/Ñ/°°B¸Ó:ˆÜ×%Ñ% b¨"¨q°!°Q¨iÓ8ˆØ�x‰x˜‰{˜bŸh™h q™kÒ)Ð)Ð)Ü˜Ÿ
™
› c§k¡k£m¸%Õ@äœ:Ó&ñ 	:Ü×#Ñ#¢I¨r°A°3°q±5Ô9÷	:ô œ:Ð->Ô?ñ 	9Ü×#Ñ# a¨ V H¨b°1°#°a±%Ô8÷	9ð 	9÷	:ð 	:ú÷	9ð 	9ús   ÃD!Ã9D-Ä!D*Ä-D6c           
      óž  — t         j                  j                  d«      }d}t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t         j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f¬«      }t        |||f||¬	«      }d
„ }t        d||«       y )Nr€  r6   r   r”   r•   rº   r7   r)   rå   c                 óL   — t         j                  g d¢g d¢g d¢f   } ||«       y )Nr�  r‚  r¨  )rF   rí   )r«   r  rc  s      rP   rY  z1TestNdBSpline.test_concurrency.<locals>.worker_fnÊ
  s&   € Ü—‘’{Ú&Ú&ð'ñ (ˆBñ ��Grf   r^   )	rF   rL   r„  rŸ   r‰   r…  r–   r   r!   )	rM   rŠ   r/   r@  rA  r©  r.   r  rY  s	            rP   rZ  zTestNdBSpline.test_concurrency¿
  s+  € ä�i‰i×#Ñ# EÓ*ˆØˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆÜ�U‰U�1�a˜˜AœrŸw™w s§{¡{¸ {Ó':Ó;¸aÑ?ÀÀAÀqÈ!ÐKÑLˆØ�K‰K˜bŸg™g a™i¨™k¨2¯7©7°1©9°Q©;¸¿¹À¹	À!¹ÐDˆKÓEˆä˜˜R ˜ a¨1Ô-ˆò	ô 	   I¨sÕ3rf   )r  r	  r
  rd  rj  rl  rt  r}  r  r…  r‹  rŽ  r’  rš  r�  r¤  r¦  r«  r­  rZ   rh  ri  rµ  r·  r¹  r»  rÁ  rÅ  rÉ  rj  rZ  r  rf   rP   r_  r_  		  s  „ òBò"ò&ò9ò8($òV6ò&$ò&,ò+ò2@ò Gò(ò&4ò7ò,Gò&@ð& ‡[�[×Ñ˜\¨D°$¨<Ó8Ø‡[�[×Ñ˜]¨T°4¨LÓ9ñ4ó :ó 9ð4ð ‡[�[×Ñ˜X¨°|Ð'DÓEñ4ó Fð4ò @ò 4ò$@ò2
5ò9ð ‡[�[×Ññ4ó ñ4rf   r_  c                   ó6  — e Zd Zd„ Zd„ Zej                  j                  dg d¢«      d„ «       Zd„ Z	d„ Z
d„ Zej                  j                  d	ej                  ej                  g«      d
„ «       Zd„ Zej                  j                  dg d¢«      d„ «       Zd„ Zy)Ú
TestMakeNDc                 óŠ  — t        j                  d«      }t        j                  d«      dz   }|d d …d f   dz  |dz  d|z  z   d d d …f   z  }t        j                  ||«      D ��cg c]	  \  }}||f‘Œ }}}t	        ||f|d¬«      }t         ||«      |j                  «       d¬«       t        ||dz  d¬«      }t        ||dz  d|z  z   d¬«      }	|j                  d d …d f   |	j                  d d d …f   z  }
t        |
|j                  d	d
¬«       d
dl	m
}  |||f|d¬«      }t         ||«       ||«      d¬«       y c c}}w )Nr“   r¼   r6   r4   r)   rå   rS   rk   r4  r   rT   )r   Úlinearr¤  rj   )rF   rJ   rS  rT  r"   r   rq  r
   r.   Úscipy.interpolater   )rM   rm   r‹   r—  ru  rO   rc  rv   r•  r–  rÝ   ÚRGIr˜  s                rP   Útest_2D_separable_simplez#TestMakeND.test_2D_separable_simpleÔ
  s1  € Ü�I‰I�a‹LˆÜ�I‰I�a‹L˜3ÑˆØ’1�d�7‘˜Q‘ ! Q¡$¨¨1©¡*¨d²A¨gÑ!6Ñ6ˆÜ!*×!2Ñ!2°1°aÓ!8×9™˜˜Aˆq�!ŠfÐ9ˆÑ9ä˜A˜q˜6 6¨QÔ/ˆÜ™˜R› &§,¡,£.°uÕ=ô # 1 a¨¡d¨aÔ0ˆÜ" 1 a¨¡d¨Q¨q©S¡j°AÔ6ˆØ�W‰W’Q˜�WÑ §¡¨ªa¨Ñ 0Ñ0ˆÜ˜˜DŸF™F¨°QÕ7õ 	EÙ�1�a�&˜&¨Ô2ˆÜ™˜B›¡ b£°Ö6ùó :s   Á&D?c                 ó  — t        j                  d«      }t        j                  d«      }t        j                  ||«      D ��cg c]	  \  }}||f‘Œ }}}|d d …d f   dz  |dz  d|z  z   d d d …f   z  }t        j                  ||||f«      }t        ||f|dt        j                  ¬«      } ||«      }	t        j                  ||||f«      j                  t        «      }
|	j                  dk(  sJ ‚t        |	j                  ddd«      |
d¬«       |j                  d	«      }t        ||f|dt        j                  ¬«      } ||«      }	|	j                  d
k(  sJ ‚t        |	j                  dddd«      |
j                  d	«      d¬«       y c c}}w )Nr“   r6   r4   ©r/   Úsolver)é$   r7   r7   rj   rk   rw  )rÖ  r4   r4   )rF   rJ   rS  rT  rî   r"   ÚsslÚspsolverS  ro  r™   r   rt   )rM   rm   r‹   ru  rO   rc  r—  Úvalues4rv   rX  rr  Úvalues22s               rP   Útest_2D_separable_trailing_dimsz*TestMakeND.test_2D_separable_trailing_dimsè
  si  € ä�I‰I�a‹LˆÜ�I‰I�a‹LˆÜ!*×!2Ñ!2°1°aÓ!8×9™˜˜Aˆq�!ŠfÐ9ˆÑ9ð ’1�d�7‘˜Q‘ ! Q¡$¨¨1©¡*¨d²A¨gÑ!6Ñ6ˆÜ—)‘)˜V V¨V°VÐ<Ó=ˆÜ˜A˜q˜6 7¨a¼¿¹ÔDˆá�b“ˆÜ—‘˜F F¨F°FÐ;Ó<×CÑCÄEÓJˆØ�|‰|˜wÒ&Ð&Ð&Ü˜Ÿ™ q¨!¨QÓ/Ø Uõ	,ð —?‘? <Ó0ˆÜ˜A˜q˜6 8¨q¼¿¹ÔEˆá�b“ˆØ�|‰|˜zÒ)Ð)Ð)Ü˜Ÿ™ q¨!¨Q°Ó2ØŸ™ |Ó4¸5ö	Bùó' :s   ÁF	r/   )r½  r�  )r6   r)   )r)   r6   rõ  c                 ó~  — t        j                  d«      }t        j                  d«      dz   }t        j                  ||«      D ��cg c]	  \  }}||f‘Œ }}}|dz  d d …d f   |dz  d|z  z   d d d …f   z  }t	        ||f||t
        j                  ¬«      }t         ||«      |j                  «       d¬«       y c c}}w )	Nr“   r”   ró   r6   r4   rÔ  rS   rk   )	rF   rJ   rS  rT  r"   r×  rØ  r   rq  )	rM   r/   rm   r‹   ru  rO   rc  r—  rv   s	            rP   r‹  zTestMakeND.test_2D_mixed  s©   € ô �I‰I�a‹LˆÜ�I‰I�a‹L˜3ÑˆÜ!*×!2Ñ!2°1°aÓ!8×9™˜˜Aˆq�!ŠfÐ9ˆÑ9à�Q‘$š˜4˜‘ A q¡D¨1¨Q©3¡J°²a°Ñ#8Ñ8ˆÜ˜A˜q˜6 6¨Q´s·{±{ÔCˆÜ™˜R› &§,¡,£.°uÖ=ùó	 :s   ÁB9c           	      ó¶   — t        j                  g d¢«      }t        j                  g d¢«      }t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      }|||fS )N)r¼   r9   r:   r;   rŠ  r‹  )r)   r4   r)   r4   r)   r)   )r)   r4   r6   r4   r)   r)   )r)   r4   r4   r4   r)   r)   )rF   r  rp  s       rP   Ú_get_sample_2d_datazTestMakeND._get_sample_2d_data  sR   € ä�H‰HÒ.Ó/ˆÜ�H‰HÒ.Ó/ˆÜ�H‰Hâ"Ú"Ú"Ú"Ú"Ú"ðó	
ˆð �!�Qˆwˆrf   c                 óê   — | j                  «       \  }}}t        ||f|d¬«      }t        ||f|d¬«      }t        j                  g d¢g d¢g«      j
                  }t         ||«       ||«      d¬«       y )	Nr)   rå   rÏ  r¤  ©r)   gffffff@g333333@r¼   çffffff
@ç333333ó?r6   ©r)   rá  râ  r;   rD  r+   r6   rj   rk   ©rÞ  r"   r   rF   r  r›  r   ©rM   rm   r‹   rq  rv   r˜  rc  s          rP   Útest_2D_vs_RGI_linearz TestMakeND.test_2D_vs_RGI_linear  sq   € Ø×*Ñ*Ó,‰ˆˆ1ˆaÜ˜A˜q˜6 1¨Ô*ˆÜ% q¨! f¨a¸ÔAˆä�X‰XÒ6Ú6ð8ó 9ß9:¹ð 	ô 	™˜R›¡# b£'°Ö6rf   c                 ó  — | j                  «       \  }}}t        ||f|dt        j                  ¬«      }t	        ||f|d¬«      }t        j                  g d¢g d¢g«      j                  }t         ||«       ||«      d¬«       y )	Nr6   rÔ  Úcubic_legacyr¤  rà  rã  rj   rk   ©	rÞ  r"   r×  rØ  r   rF   r  r›  r   rå  s          rP   Útest_2D_vs_RGI_cubiczTestMakeND.test_2D_vs_RGI_cubic'  sw   € Ø×*Ñ*Ó,‰ˆˆ1ˆaÜ˜A˜q˜6 1¨´#·+±+Ô>ˆÜ% q¨! f¨a¸ÔGˆä�X‰XÒ6Ú6ð8ó 9ß9:¹ð 	ô 	™˜R›¡# b£'°Ö6rf   rÕ  c                 óð   — | j                  «       \  }}}t        ||f|d|d¬«      }t        ||f|d¬«      }t        j                  g d¢g d¢g«      j
                  }t         ||«       ||«      dd	¬
«       y )Nr6   g�íµ ÷Æ°>)r/   rÕ  rV   rè  r¤  rà  rã  rj   r¨   rT   rä  )rM   rÕ  rm   r‹   rq  rv   r˜  rc  s           rP   Útest_2D_vs_RGI_cubic_iterativez)TestMakeND.test_2D_vs_RGI_cubic_iterative1  sy   € ð ×*Ñ*Ó,‰ˆˆ1ˆaÜ˜A˜q˜6 1¨°&¸tÔDˆÜ% q¨! f¨a¸ÔGˆä�X‰XÒ6Ú6ð8ó 9ß9:¹ð 	ô 	™˜R›¡# b£'°¸DÖArf   c                 ó  — | j                  «       \  }}}t        ||f|dt        j                  ¬«      }t	        ||f|d¬«      }t        j                  g d¢g d¢g«      j                  }t         ||«       ||«      d¬«       y )	Nr˜   rÔ  Úquintic_legacyr¤  rà  rã  rj   rk   ré  rå  s          rP   Útest_2D_vs_RGI_quinticz!TestMakeND.test_2D_vs_RGI_quintic@  sx   € Ø×*Ñ*Ó,‰ˆˆ1ˆaÜ˜A˜q˜6 1¨´#·+±+Ô>ˆÜ% q¨! f¨aÐ8HÔIˆä�X‰XÒ6Ú6ð8ó 9ß9:¹ð 	ô 	™˜R›¡# b£'°Ö6rf   zk, meth))r)   rÏ  )r6   rè  )r˜   rî  c                 ó  — t         j                  j                  d«      }t        j                  |j	                  d¬«      «      }t        j                  |j	                  d¬«      «      }t        j                  |j	                  d¬«      «      }|j	                  d¬«      }t        |||f||t        j                  ¬«      }t        |||f||¬«      }	t         j                  j	                  d	d
d¬«      }
t         ||
«       |	|
«      d¬«       y )Ni@â r“   r•   r”   rº   r  rÔ  r¤  gffffffæ?r„  r>   rƒ  rj   rk   )
rF   rL   r„  Úcumsumr…  r"   r×  rØ  r   r   )rM   r/   ÚmethÚrndmrm   r‹   rq  r—  rv   r˜  rc  s              rP   Útest_3D_random_vs_RGIz TestMakeND.test_3D_random_vs_RGIJ  sÐ   € ô �y‰y×$Ñ$ VÓ,ˆÜ�I‰I�d—l‘l¨�lÓ*Ó+ˆÜ�I‰I�d—l‘l¨�lÓ*Ó+ˆÜ�I‰I�d—l‘l¨�lÓ*Ó+ˆØ—‘ 9�Ó-ˆä˜A˜q !˜9 f°¼#¿+¹+ÔFˆÜ% q¨!¨Q i°ÀÔEˆä�Y‰Y×Ñ 3¨S°wÐÓ?ˆÜ™˜R›¡# b£'°Ö6rf   c                 ó:  — | j                  «       \  }}}ddi}t        t        d¬«      5  t        ||f|fddi|¤Ž d d d «       t        t        d¬«      5  t        ||ft	        j
                  ||f«      fddi|¤Ž d d d «       y # 1 sw Y   ŒJxY w# 1 sw Y   y xY w)NÚmaxiterr)   rÕ  rç  r/   r6   )rÞ  rB   rD   r"   rF   rî   )rM   rm   r‹   rq  Úsolver_argss        rP   Útest_solver_err_not_convergedz(TestMakeND.test_solver_err_not_convergedZ  s¦   € Ø×*Ñ*Ó,‰ˆˆ1ˆaØ  !�nˆÜœ:¨XÔ6ñ 	7Ü˜˜A˜ Ñ6 QÐ6¨+Ò6÷	7ô œ:¨XÔ6ñ 	GÜ˜˜A˜¤§	¡	¨1¨a¨&Ó 1ÑF°QÐF¸+ÒF÷	Gð 	G÷	7ð 	7ú÷	Gð 	Gús   ªBÁ'BÂBÂBN)r  r	  r
  rÒ  rÛ  rZ   rh  ri  r‹  rÞ  ræ  rê  r×  ÚgmresÚgcrotmkrì  rï  rô  rø  r  rf   rP   rÍ  rÍ  Ó
  s¬   „ ò7ò(Bð4 ‡[�[×Ñ˜SÒ"JÓKñ>ó Lð>òò 7ò7ð ‡[�[×Ñ˜X¨¯	©	°3·;±;Ð'?Ó@ñBó AðBò7ð ‡[�[×ÑØÒNóñ7óð7óGrf   rÍ  c                   óH   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)Ú
TestFpchecc                 ó˜  — d}t        j                  d«      j                  dd«      }t        j                  d«      }t        j                  t
        d¬«      5  t        j                  |||«       d d d «       t        j                  t
        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   ŒExY w# 1 sw Y   y xY w)Nr)   rÎ  r4   r“   z1D sequencerç  )rF   rJ   rt   rZ   r   rD   Ú_bÚfpcheck©rM   r/   r-   rm   s       rP   Útest_1D_x_tzTestFpchec.test_1D_x_tg  s›   € ØˆÜ�I‰I�b‹M×!Ñ! ! QÓ'ˆÜ�I‰I�b‹Mˆä�]‰]œ:¨]Ô;ñ 	 Ü�J‰J�q˜!˜QÔ÷	 ô �]‰]œ:¨]Ô;ñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð 	 ÷	 ð 	 ú÷	 ð 	 ús   ÁB4ÂC Â4B=Ã C	c                 ó‚  — d}d|dz   z  dz
  }|dz   }t        j                  |«      }t        j                  |«      }t        j                  |||«      dk(  sJ ‚t	        j
                  t        d¬«      5  t        j                  |||«       d d d «       d|dz   z  dz   }||z
  dz
  }t        j                  |«      }t        j                  |«      }t        j                  |||«      dk(  sJ ‚t	        j
                  t        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   ŒžxY w# 1 sw Y   y xY w)Nr6   r4   r)   r?   r^   z	Need k+1*rç  )	rF   rJ   ÚdfitpackÚfpchecrZ   r   rD   rþ  rÿ  )rM   r/   rN   r}  r-   rm   s         rP   Útest_condition_1zTestFpchec.test_condition_1r  s  € àˆØ��A‘‰Y˜‰]ˆØ�‰FˆÜ�I‰I�a‹LˆÜ�I‰I�a‹Lˆä�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:¨[Ô9ñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð ˆq�‰s‰G�a‰KˆØ�‰E�A‰IˆÜ�I‰I�a‹LˆÜ�I‰I�a‹Lˆä�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:¨[Ô9ñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð 	 ÷	 ð 	 ú÷	 ð 	 ús   Á4D)ÄD5Ä)D2Ä5D>c                 ó”  — d}dg|dz   z  dgz   dg|dz   z  z   }g d¢}t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚|j	                  «       }|d   |d<   t        j                  |||«      dk(  sJ ‚t        j                  t        d	¬
«      5  t        j                  |||«       d d d «       |j	                  «       }|d   |d<   t        j                  |||«      dk(  sJ ‚t        j                  t        d¬
«      5  t        j                  |||«       d d d «       y # 1 sw Y   ŒyxY w# 1 sw Y   y xY w)Nr6   r   r)   r4   r˜   )r)   r4   r6   r7   r‰  r2   r†   zLast k knots*rç  zFirst k knots*©r  r  rþ  rÿ  rÞ  rZ   r   rD   )rM   r/   r-   rm   Útts        rP   Útest_condition_2zTestFpchec.test_condition_2‡  s:  € ð ˆØˆC��1‘‰I˜˜‰O˜q˜c 1 Q¡3™iÑ'ˆÚˆä�‰˜q ! QÓ'¨1Ò,Ð,Ð,Ü�z‰z˜!˜Q Ó"Ð*Ð*Ð*à�V‰V‹XˆØ�A‘ˆˆ2‰Ü�‰˜q " aÓ(¨BÒ.Ð.Ð.Ü�]‰]œ:¨_Ô=ñ 	!Ü�J‰J�q˜"˜aÔ ÷	!ð �V‰V‹XˆØ�2‘ˆˆ1‰Ü�‰˜q " aÓ(¨BÒ.Ð.Ð.Ü�]‰]œ:Ð-=Ô>ñ 	!Ü�J‰J�q˜"˜aÔ ÷	!ð 	!÷	!ð 	!ú÷	!ð 	!ús   Â"D2ÄD>Ä2D;Ä>Ec                 ó   — d}dg|dz   z  ddgz   dg|dz   z  z   }g d¢}t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚dg|dz   z  ddgz   dg|dz   z  z   }t        j                  |||«      dk(  sJ ‚t	        j
                  t        d¬	«      5  t        j                  |||«       d d d «       y # 1 sw Y   y xY w)
Nr6   r   r)   r4   r˜   ©r)   r4   r6   r”  r7   r‰  é   zInternal knots*rç  )r  r  rþ  rÿ  rZ   r   rD   r   s       rP   Útest_condition_3zTestFpchec.test_condition_3�  sÝ   € àˆØˆC��1‘‰I˜˜A˜Ñ !  a¨¡c¡Ñ*ˆÚ"ˆÜ�‰˜q ! QÓ'¨1Ò,Ð,Ð,Ü�z‰z˜!˜Q Ó"Ð*Ð*Ð*àˆC��1‘‰I˜˜A˜Ñ !  a¨¡c¡Ñ*ˆÜ�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð->Ô?ñ 	 Ü�J‰J�q˜!˜QÔ÷	 ÷ 	 ñ 	 ús   Â#CÃCc                 ó2  — d}dg|dz   z  dg|dz   z  z   }g d¢}t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚|j	                  «       }|d   |d<   t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚|j	                  «       }|d   dz
  |d<   t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       |j	                  «       }|d	   dz   |d	<   t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   Œ|xY w# 1 sw Y   y xY w)
Nr6   r   r)   r˜   r  r#  zOut of bounds*rç  r2   r  )rM   r/   r-   rm   rd   s        rP   Útest_condition_4zTestFpchec.test_condition_4ª  s‰  € ð ˆØˆC��1‘‰I˜˜˜Q˜q™S™	Ñ!ˆÚ"ˆÜ�‰˜q ! QÓ'¨1Ò,Ð,Ð,Ü�z‰z˜!˜Q Ó"Ð*Ð*Ð*à�V‰V‹XˆØ�!‘ˆˆ1‰Ü�‰˜r 1 aÓ(¨AÒ-Ð-Ð-Ü�z‰z˜!˜Q Ó"Ð*Ð*Ð*à�V‰V‹XˆØ�!‘�q‘ˆˆ1‰Ü�‰˜r 1 aÓ(¨BÒ.Ð.Ð.Ü�]‰]œ:Ð-=Ô>ñ 	!Ü�J‰J�r˜1˜aÔ ÷	!ð �V‰V‹XˆØ�2‘˜‘ˆˆ2‰Ü�‰˜r 1 aÓ(¨BÒ.Ð.Ð.Ü�]‰]œ:Ð-=Ô>ñ 	!Ü�J‰J�r˜1˜aÔ ÷	!ð 	!÷	!ð 	!ú÷	!ð 	!ús   Ã.FÅ FÆF
ÆFc                 ó¬  — d}g d¢}g d¢}t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       g d¢}t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)Nr)   )r   r   r)   r4   r4   )rƒ  rƒ  rƒ  ri   úSchoenberg-Whitney*rç  )r¼   r¼   r¼   ©r  r  rZ   r   rD   rþ  rÿ  r   s       rP   Útest_condition_5_x1xmz TestFpchec.test_condition_5_x1xmÉ  s»   € àˆÚˆÚˆÜ�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ò ˆÜ�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð 	 ÷	 ð 	 ú÷
	 ð 	 ús   ÁB>ÂC
Â>CÃ
Cc                 ó‚   — d}g d¢}ddg}t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚y )Nr)   )r   r   r)   r)   r¼   g333333ã?r   )r  r  rþ  rÿ  r   s       rP   Útest_condition_5_k1zTestFpchec.test_condition_5_k1×  sI   € àˆÚˆØ�#ˆJˆÜ�‰˜q ! QÓ'¨1Ò,Ð,Ð,Ü�z‰z˜!˜Q Ó"Ð*Ð*Ñ*rf   c                 ó  — d}dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   Œ~xY w# 1 sw Y   y xY w)	Nr6   r   r)   r4   r˜   ri   r  rç  r  r   s       rP   Útest_condition_5_1zTestFpchec.test_condition_5_1ß  s
  € àˆØˆC��1‘‰I˜˜‰O˜q˜c 1 Q¡3™iÑ'ˆØˆC�‰EˆÜ�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð ˆC��1‘‰I˜˜‰O˜q˜c 1 Q¡3™iÑ'ˆØˆC�‰EˆÜ�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð 	 ÷	 ð 	 ú÷	 ð 	 ús   ÁC,ÃC8Ã,C5Ã8Dc                 ó’  — d}dg|dz   z  ddgz   dg|dz   z  z   }dgdz  dgz   }t        j                  |||«      dk(  sJ ‚t        j                  t        d	¬
«      5  t        j                  |||«       d d d «       dgdz  ddgz   }t        j                  |||«      dk(  sJ ‚t        j                  |||«      �J ‚y # 1 sw Y   ŒJxY w)Nr6   r   r)   r4   r˜   rƒ  r7   ri   r  rç  r  r   s       rP   Útest_condition_5_2zTestFpchec.test_condition_5_2î  sØ   € àˆØˆC��1‘‰I˜˜A˜Ñ !  a¨¡c¡Ñ*ˆØˆE�!‰G�q�c‰Mˆä�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ð ˆE�!‰G�q˜!�fÑˆÜ�‰˜q ! QÓ'¨1Ò,Ð,Ð,Ü�z‰z˜!˜Q Ó"Ð*Ð*Ñ*÷	 ð 	 ús   ÁB=Â=Cc                 óÞ   — d}g d¢}g d¢}t        j                  |||«      dk(  sJ ‚t        j                  t        d¬«      5  t        j                  |||«       d d d «       y # 1 sw Y   y xY w)Nr)   )	r   r   r4   r6   r7   r˜   r“   r”   r”   )r)   r)   r)   çÍÌÌÌÌÌ@r  r  rn  ri   r  rç  r  r   s       rP   Útest_condition_5_3zTestFpchec.test_condition_5_3ý  s`   € àˆÚ'ˆÚ)ˆä�‰˜q ! QÓ'¨2Ò-Ð-Ð-Ü�]‰]œ:Ð-BÔCñ 	 Ü�J‰J�q˜!˜QÔ÷	 ÷ 	 ñ 	 ús   ÁA#Á#A,N)r  r	  r
  r  r  r	  r  r  r  r  r  r  r  r  rf   rP   rü  rü  d  s4   „ ò	 ò ò*!ò, ò!ò> ò+ò ò+ó rf   rü  c                 ó°  — t        j                  | |||  «      }t        t        |«      dz
  «      D �cg c]  }|||   ||dz       j	                  «       ‘Œ  }}||dd    }t        t        |«      «      D ]'  }||   dz  }||xx   |z  cc<   ||dz   xx   |z  cc<   Œ) |dxx   |d   z  cc<   t        t	        |«      t	        |«      d¬«       ||fS c c}w )z)Split the knot interval into "runs".
    r)   r2   r4   rS   rk   )rF   r·  rÈ   r(  r¸  r   )	rm   r-   r/   Ú	residualsr=  r÷   ÚfpartsÚcarriesÚcarrys	            rP   Ú_splitr"  
  så   € ô 
�‰˜˜A˜a  ˜GÓ	$€Bä6;¼CÀ»GÀA¹IÓ6FÖG°ˆi˜˜1™˜b  1¡™gÐ&×*Ñ*Õ,ÐG€FÐGØ˜˜1˜R˜Ñ!€Gä”3�w“<Ó ò ˆØ˜‘
˜Q‘ˆØˆq‹	�UÑ‹	Øˆq�‰s‹�uÑŒðð
 ˆ2ƒJ�)˜B‘-ÑƒJä”C˜“K¤ Y£°eÕ<à�2ˆ:Ðùò Hs   ´#Cc                 ó\  — t        | |||«      \  }}d}d}t        t        |«      «      D ]$  }||dz      ||   z
  dkD  sŒ||   |kD  sŒ|}||   }Œ& |dk(  rt        d«      ‚||   ||dz      z   dz   dz  }	| |	   }
t	        j
                  ||
«      }t        j                  |d| |
||d f   }|S )z Insert a new knot given reduals.i›ÿÿÿg}Ã”%­I²Ôr)   z5Internal error, please report it to SciPy developers.r4   N)r"  rÈ   r(  rD   rF   r·  rŸ   )rm   r-   r/   r  r  r=  Úidx_maxÚ	fpart_maxr÷   Úidx_newknotÚnew_knotÚidx_tÚt_news                rP   Ú	_add_knotr*    sá   € ä˜˜1˜a Ó+�J€FˆBð €GØ€IÜ”3�v“;Óò "ˆØˆa�‰c‰7�R˜‘U‰?˜QÓ 6¨!¡9¨yÓ#8ØˆGØ˜q™	‰Ið"ð
 �$‚ÜÐPÓQÐQð �g‘;  G¨A¡I¡Ñ.°Ñ2°qÑ8€KØ�‰~€HÜ�O‰O˜A˜xÓ(€EÜ�E‰E�!�F�U�)˜X q¨¨ yÐ0Ñ1€EØ€Lrf   c                   óF  — e Zd Zd„ Zej
                  j                  dg d¢«      d„ «       Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zej
                  j                  dg d¢«      ej
                  j                  dg d¢«      d„ «       «       Zej
                  j                   d„ «       Zy)ÚTestGenerateKnotsc                 óæ  — t        j                  dt        ¬«      }|dz  dd|z   z  z   }d}t        j                  dg|dz   z  dg|dz   z  z   «      }t	        ||||¬«      } ||«      |z
  d	z  }d
dlm} |j                  ||||«      }t        ||||«      }	t        ||	d¬«       t	        ||||¬«      }
 |
|«      |z
  d	z  }|j                  ||||«      }t        ||||«      }t        ||d¬«       y )Nrº   r@   r6   r+   r)   r8   ro  )r/   r-   r4   r   ©Ú_fitpack_reprorS   rk   )
rF   rJ   ro  r  r   rÐ  r/  Úadd_knotr*  r   )rM   rm   r‹   r/   r-   r  r  Ú_frÚnew_tÚnew_t_pyÚspl2Ú
residuals2Únew_t2Ú	new_t2_pys                 rP   Útest_split_add_knotz%TestGenerateKnots.test_split_add_knot6  sü   € ä�I‰I�aœuÔ%ˆØˆq‰D�2�q˜1‘u‘:ÑˆØˆÜ�H‰H�b�T˜1˜Q™3‘Z 2 $¨¨!©¡*Ñ,Ó-ˆÜ˜a  a¨1Ô-ˆÙ˜“V˜a‘Z !‘Oˆ	å;Ø—‘˜Q  1 iÓ0ˆÜ˜Q  1 iÓ0ˆä˜˜x¨eÕ4ô ˜q ! q¨EÔ2ˆÙ˜1“g ‘k AÑ%ˆ
à—‘˜a ¨¨:Ó6ˆÜ˜a ¨¨:Ó6ˆ	ä˜ 	°Ö6rf   r/   r¨  c                 ó  — t        j                  dt         j                  ¬«      }t        j                  |t         j                  z  dz  «      }t        t        |||d¬«      «      d   }t        |||d¬«      d   }t        ||d¬«       y )Nrº   r@   r   ©r/   rÁ  r2   rS   rk   )	rF   rJ   rK   rq  r•  rt  r   r   r   )rM   r/   rm   r‹   r-   r  s         rP   Útest_s0zTestGenerateKnots.test_s0N  sk   € ä�I‰I�aœrŸz™zÔ*ˆÜ�F‰F�1”R—U‘U‘7˜1‘9ÓˆÜ”  1¨¨QÔ/Ó0°Ñ4ˆä�A�q˜A Ô# AÑ&ˆÜ˜˜2 EÖ*rf   c                 ó¢   — d}t        j                  |«      }|dz  }t        t        ||dd¬«      «      }t	        |d   t        |d«      d¬«       y )Nr^   r6   r   r:  r2   rS   rk   ©rF   rJ   rt  r   r   r   ©rM   rN   rm   r‹   Úknotss        rP   Ú	test_s0_1zTestGenerateKnots.test_s0_1W  sI   € àˆÜ�I‰I�a‹LˆØˆq‰DˆÜ”^ A q¨A°Ô3Ó4ˆÜ˜˜b™	¤;¨q°!Ó#4¸5ÖArf   c                 ó¢   — d}t        j                  |«      }|dz  }t        t        ||dd¬«      «      }t	        |d   t        |d«      d¬«       y )Nr†   r6   r   r:  r2   rS   rk   r=  r>  s        rP   Útest_s0_n20zTestGenerateKnots.test_s0_n20_  sI   € ØˆÜ�I‰I�a‹LˆØˆq‰DˆÜ”^ A q¨A°Ô3Ó4ˆÜ˜˜b™	¤;¨q°!Ó#4¸5ÖArf   c           
      ó²   — t        j                  d«      }|dz  }t        t        «      5  t	        t        ||ddd¬«      «       d d d «       y # 1 sw Y   y xY w)Nr^   r6   r   ©r/   rÁ  Únest)rF   rJ   rB   rD   rt  r   ©rM   rm   r‹   s      rP   Útest_s0_nestzTestGenerateKnots.test_s0_nestf  sJ   € ä�I‰I�b‹MˆØˆq‰DˆÜœ:Ó&ñ 	:Ü”  1¨¨Q°RÔ8Ô9÷	:÷ 	:ñ 	:ús   ªAÁAc                 ó”  — t        j                  d«      }t        j                  |t         j                  z  dz  «      }d}t	        t        |||d¬«      «      }g d¢g d¢g d¢g d¢g d	¢g}t        |«      t        |«      k(  sJ ‚t        ||«      D ]  \  }}t        ||d
¬«       Œ t        |||d¬«      \  }}}t        |d   |d
¬«       y)aY  
        To generate the `wanted` list below apply the following diff and rerun
        the test. The stdout will contain successive iterations of the `t`
        array.

$ git diff scipy/interpolate/fitpack/fpcurf.f
diff --git a/scipy/interpolate/fitpack/fpcurf.f b/scipy/interpolate/fitpack/fpcurf.f
index 1afb1900f1..d817e51ad8 100644
--- a/scipy/interpolate/fitpack/fpcurf.f
+++ b/scipy/interpolate/fitpack/fpcurf.f
@@ -216,6 +216,9 @@ c  t(j+k) <= x(i) <= t(j+k+1) and store it in fpint(j),j=1,2,...nrint.
         do 190 l=1,nplus
 c  add a new knot.
           call fpknot(x,m,t,n,fpint,nrdata,nrint,nest,1)
+          print*, l, nest, ': ', t
+          print*, "n, nmax = ", n, nmax
+
 c  if n=nmax we locate the knots as for interpolation.
           if(n.eq.nmax) go to 10
 c  test whether we cannot further increase the number of knots.
        rº   r6   r¨   r:  )r8   r8   r8   r8   ro  ro  ro  ro  )	r8   r8   r8   r8   r;   ro  ro  ro  ro  ©
r8   r8   r8   r8   r9   r;   ro  ro  ro  ro  )r8   r8   r8   r8   r9   r;   r‹  ro  ro  ro  ro  )r8   r8   r8   r8   r9   r:   r;   rD  r”   ro  ro  ro  rS   rk   r2   N)
rF   rJ   rq  r•  rt  r   r(  r   r   r   )	rM   rm   r‹   r/   r?  Úwantedr-   r  r«   s	            rP   Útest_s_switchzTestGenerateKnots.test_s_switchm  sÁ   € ô. �I‰I�a‹LˆÜ�F‰F�1”R—U‘U‘7˜1‘9ÓˆØˆä”^ A q¨A°Ô6Ó7ˆÚ2Ú6Ú:Ú>ÚAð	
ˆô �5‹zœS ›[Ò(Ð(Ð(Ü˜ Ó'ò 	/‰EˆAˆrÜ˜A˜r¨Ö.ð	/ô ˜˜A  dÔ+‰ˆˆ1ˆaÜ˜˜b™	 1¨5Ö1rf   c                 ó`   — t        t        d«      «      }t        ||dd¬«      }t        |«       y )Nrº   rˆ  r)   )rÁ  r/   )rt  rÈ   r   Únext)rM   rm   Úgens      rP   rv  z!TestGenerateKnots.test_list_input˜  s&   € ä”�q“‹NˆÜ˜Q  S¨AÔ.ˆÜˆS�	rf   c           	      óT  — t        j                  d«      }t        j                  |t         j                  z  dz  «      }d}t	        t        ||d|d¬«      «      }t        |d   g d¢d¬	«       t        t        «      5  t	        t        ||dd
¬«      «       d d d «       y # 1 sw Y   y xY w)Nrº   r¨   r6   r^   rD  r2   rI  rS   rk   r7   )r/   rE  )	rF   rJ   rq  r•  rt  r   r   rB   rD   )rM   rm   r‹   rÁ  r?  s        rP   Ú	test_nestzTestGenerateKnots.test_nestž  s‹   € ä�I‰I�a‹LˆÜ�F‰F�1”R—U‘U‘7˜1‘9ÓˆØˆä”^ A q¨A°¸Ô<Ó=ˆÜ˜˜b™	Ú@Àuõ	Nô œ:Ó&ñ 	4ä”  1¨°Ô2Ô3÷	4÷ 	4ñ 	4ús   Á<BÂB'c           
      óº  — t        j                  d«      }t        j                  |t         j                  z  dz  «      }t	        t
        «      5  t        t        ||t        j                  d«      ¬«      «       d d d «       t	        t
        «      5  t        t        ||t        j                  d«       ¬«      «       d d d «       y # 1 sw Y   ŒMxY w# 1 sw Y   y xY w)Nrº   r?   ©r­  )	rF   rJ   rq  r•  rB   rD   rt  r   rŸ  rF  s      rP   r¯  zTestGenerateKnots.test_weights¬  sž   € Ü�I‰I�a‹LˆÜ�F‰F�1”R—U‘U‘7˜1‘9Óˆäœ:Ó&ñ 	8Ü”  1¬¯	©	°"«Ô6Ô7÷	8ô œ:Ó&ñ 	6Ü”  1¬¯©°«¨Ô4Ô5÷	6ð 	6÷	8ð 	8ú÷	6ð 	6ús   Á+CÂ,CÃCÃCÚnpts)r  ri   rŽ   rÁ  )rˆ  g{®Gáz„?r   c                 ó˜  — t         j                  j                  d«      }dt        j                  |j	                  |¬«      «      z  }t        j
                  |t         j                  z  dz  «      t        j                  |dz
  dz   «      z   }d}t        ||||¬«      d   }t        t        ||||¬«      «      d	   }t        ||d
¬«       y )Nr€  r^   r•   r“   r4   r6   r:  r   r2   rS   rk   )rF   rL   rˆ   r‰   r…  rq  r•  Úexpr   rt  r   r   )	rM   rÁ  rS  ró  rm   r‹   r/   r-   r  s	            rP   Útest_vs_splrepz TestGenerateKnots.test_vs_splrep¶  s¨   € ô �y‰y×$Ñ$ UÓ+ˆØŒr�w‰w�t—|‘|¨�|Ó.Ó/Ñ/ˆÜ�F‰F�1”R—U‘U‘7˜2‘:Ó¤§¡¨!¨A©#°©¨	Ó!2Ñ2ˆàˆÜ�1�a˜1 Ô" 1Ñ%ˆÜ”.  A¨¨aÔ0Ó1°"Ñ5ˆä˜˜A EÖ*rf   c                 ó8  — d}t        j                  |«      }|dz  }t        t        ||dd¬«      «      }t	        «       5 }|j                  t        «      }t        ||dd¬«      }t        |«      dk(  sJ ‚	 d d d «       t        |d   d   «       y # 1 sw Y   ŒxY w)Né   r6   ç¸ÔJzî�5r:  r)   r2   r   )
rF   rJ   rt  r   r   ÚrecordÚRuntimeWarningr   r(  r   )rM   rN   rm   r‹   r?  Úsuprc  rY   s           rP   Útest_s_too_smallz"TestGenerateKnots.test_s_too_smallÉ  s“   € àˆÜ�I‰I�a‹LˆØˆq‰Dˆô ”^ A q¨A°Ô7Ó8ˆäÓ ð 	 CØ—
‘
œ>Ó*ˆAÜ˜˜A  eÔ,ˆCÜ�q“6˜Q’;Ð‘;÷	ô 	˜˜b™	 3 q¡6Õ*÷		ð 	ús   ¿5BÂBN)r  r	  r
  r8  rZ   rh  ri  r;  r@  rB  rG  rK  rv  rP  r¯  rV  rj  r]  r  rf   rP   r,  r,  5  s®   „ ò7ð0 ‡[�[×Ñ˜S¢/Ó2ñ+ó 3ð+òBòBò:ò)2òVò4ò6ð ‡[�[×Ñ˜V¢]Ó3Ø‡[�[×Ñ˜S¢.Ó1ñ+ó 2ó 4ð+ð" ‡[�[×Ññ+ó ñ+rf   r,  c                 óZ  — | j                   d   }| ||z
  dz
     | |   z
  }|d|z  z
  dz
  }| |dz   ||z
  dz
   }t        j                  |d«      }|ddd…xx   dz  cc<   |ddd…xx   dz  cc<    t        | t        j                  ||z
  dz
  «      |«      ||¬«      }t        j
                  |dz
  |j                   d   ft        ¬«      }t        d|j                   d   d«      D ]"  }	||	dd…f   ||	dz   dd…f   z
  ||	dz  dd…f<   Œ$ |||z  |z  t        j                  |«      z  z  }|S )z­Straitforward way to compute the discontinuity matrix. For testing ONLY.

    This routine returns a dense matrix, while `_fitpack_repro.disc` returns
    a packed one.
    r   r)   r4   Nr¦   rÆ   r@   )
r™   rF   rÖ  r   r'  Úemptyro  rÈ   ÚmathÚ	factorial)
r-   r/   rN   ÚdeltaÚnrintrP  Útiir}  Úmatrr÷   s
             rP   Ú
disc_naiverf  Ù  sD  € ð 	
�‰�‰
€Aàˆa�!‰e�a‰i‰L˜1˜Q™4Ñ€EØ��!‘‰G�a‰K€Eà	
ˆ1ˆQ‰3ˆq�‰s�1‰uˆ€BÜ
�)‰)�B˜Ó
€CØ‰ˆ!ˆƒH�ÑƒHØˆˆˆ1ˆƒI�ÑƒIØ(Œ�”2—6‘6˜!˜a™% !™)Ó$ aÓ(¨°Ô3€Aä�8‰8�U˜1‘W˜aŸg™g a™jÐ)´Ô7€DÜ�1�a—g‘g˜a‘j !Ó$ò ,ˆØ˜!šQ˜$™ ! A a¡Cª F¡)Ñ+ˆˆQ�‰T’1ˆWŠð,ð 	ˆU�5‰[˜1ÑœtŸ~™~¨aÓ0Ñ0Ñ0€DØ€Krf   c                   ó   — e Zd ZdZdd„Zd„ Zy)ÚF_densezm The r.h.s. of ``f(p) = s``, an analog of _fitpack_repro.F
    Uses full matrices, so is for tests only.
    Nc                 óš  — || _         || _        || _        || _        |€t	        j
                  |t        ¬«      n|| _        | j                  j                  dk(  sJ ‚ t        |t	        j                  |j                  d   |z
  dz
  «      |«      |«      }|| j                  d d …d f   z  | _        ddlm} t        |j!                  ||«      Ž j#                  «       | _        |j                  dk(  sJ ‚|| j                  z  }	t        j&                  |	t	        j(                  | j$                  j                  d   «      f   | _        || _        y )Nr@   r)   r   r.  )rm   r‹   r-   r/   rF   ra   ro  r­  r  r   r'  r™   Úa_denserÐ  r/  rÛ  Údiscrå  Úb_denserŸ   r  r·   rÁ  )
rM   rm   r‹   r-   r/   rÁ  r­  rj  r1  r·   s
             rP   rÞ  zF_dense.__init__ö  s
  € ØˆŒØˆŒØˆŒØˆŒØ12°”—‘˜a¤uÕ-ÀˆŒØ�v‰v�{‰{˜aÒÐÐð <”'˜!œRŸV™V A§G¡G¨A¡J°¡N°QÑ$6Ó7¸Ó;¸AÓ>ˆØ §¡ª¨4¨¡Ñ0ˆŒå;Ü# S§X¡X¨a°£^Ð4×<Ñ<Ó>ˆŒð �v‰v˜Š{Ðˆ{Ø�—‘‰ZˆÜ—%‘%˜œBŸH™H T§\¡\×%7Ñ%7¸Ñ%:Ó;Ð;Ñ<ˆŒàˆ�rf   c                 óú  — t        j                  | j                  | j                  |z  f«      }ddlm}m}  ||d¬«      \  }}|j                  | j                  z  }|j                  d   } ||d |…d |…f   |d | «      }	t        | j                  |	| j                  «      }
t        j                  | j                  dz   |
| j                  «      | j                   z
  dz  z  «      }|
| _        || j$                  z
  S )Nr   )r   rŒ  Úeconomic)r\  r)   r4   )rF   r·  rj  rl  Úscipy.linalgr   rŒ  r›  r·   r™   r   r-   r/   r¸  r­  rm   r‹   r  rÁ  )rM   rý   Úabr   rŒ  r  rc  ÚqyrÝ  r.   r  Úfps               rP   r\  zF_dense.__call__  sÓ   € Ü�Y‰Y˜Ÿ™ d§l¡l°QÑ&6Ð7Ó8ˆ÷ 	+Ù�"˜:Ô&‰ˆˆ1à�S‰S�4—7‘7‰]ˆà�W‰W�Q‰ZˆÙ�!�C�R�C˜˜"˜�H‘+˜r # 2˜wÓ'ˆä�d—f‘f˜a §¡Ó(ˆÜ�V‰V�D—F‘F˜A‘I¡ T§V¡V£¨t¯v©vÑ!5¸Ñ 9Ñ9Ó:ˆàˆŒà�D—F‘F‰{Ðrf   r´  )r  r	  r
  ræ  rÞ  r\  r  rf   rP   rh  rh  ò  s   „ ñóó,rf   rh  c                   ó†   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zej                  j                  d
„ «       Zd„ Zd„ Zy)ÚTestMakeSplrepc                 ó˜  — t        j                  ddd«      }t        j                  ddd«      }t        t        «      5  t	        ||«       d d d «       t        t        «      5  t	        ddd¬«       d d d «       t        t        «      5  t        j
                  |j                  dddf«      }t	        ||d¬«       d d d «       t        j
                  d«      }t        t        «      5  t	        ||d	z  |d¬
«       d d d «       t        j
                  d«       }t        t        «      5  t	        ||d	z  |d¬
«       d d d «       t        j
                  |j                  d   df«      }t        t        «      5  t	        ||d	z  |d¬
«       d d d «       t        t        «      5  t	        |d d d…   |d	z  d¬«       d d d «       t        t        «      5  t	        ||d	z  dd¬«       d d d «       t        t        «      5  t	        ||d	z  d¬«       d d d «       t        t        «      5  t	        ||d	z  d	dd¬«       d d d «       t        t        «      5  t	        ||d	z  dd¬«       d d d «       t        t        «      5  t	        t        j                  d«      t        j                  d«      d¬«       d d d «       y # 1 sw Y   �ŒjxY w# 1 sw Y   �ŒQxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒãxY w# 1 sw Y   �Œ°xY w# 1 sw Y   �ŒoxY w# 1 sw Y   �ŒMxY w# 1 sw Y   �Œ0xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒõxY w# 1 sw Y   Œ×xY w# 1 sw Y   y xY w)Nr   r^   r?   rÎ  r)   r4   rˆ  ©rÁ  r6   )r­  rÁ  r2   r=   r:  )r/   rE  rÁ  )rÁ  rE  rº   é	   )
rF   r`   rB   rD   r   rŸ  r–   r™   rC   rJ   )rM   rm   r‹   r­  s       rP   Útest_input_errorsz TestMakeSplrep.test_input_errors!  sÃ  € Ü�K‰K˜˜2˜rÓ"ˆÜ�K‰K˜˜2˜rÓ"ˆÜœ:Ó&ñ 	ä˜˜1Ô÷	ô œ:Ó&ñ 	%ä˜˜1 Õ$÷	%ô œ:Ó&ñ 	%ä—‘˜Ÿ™  A qÐ)Ó*ˆAÜ˜˜1 Õ$÷	%ô
 �G‰G�B‹KˆÜœ:Ó&ñ 	-ä˜˜1˜a™4 1¨Õ,÷	-ô �W‰W�R‹[ˆLˆÜœ:Ó&ñ 	-ä˜˜1˜a™4 1¨Õ,÷	-ô �G‰G�Q—W‘W˜Q‘Z �OÓ$ˆÜœ:Ó&ñ 	-ä˜˜1˜a™4 1¨Õ,÷	-ô œ:Ó&ñ 	.ä˜™$˜B˜$™  A¡¨Õ-÷	.ô œ9Ó%ñ 	/ä˜˜1˜a™4 3¨#Õ.÷	/ô œ:Ó&ñ 	'ä˜˜1˜a™4 2Õ&÷	'ô œ:Ó&ñ 	5ä˜˜1˜a™4 1¨1°Õ4÷	5ô œ:Ó&ñ 	/ä˜˜1˜a™4 1¨2Õ.÷	/ô œ:Ó&ñ 	;äœŸ	™	 !›¤b§i¡i°£l°cÕ:÷	;ð 	;÷a	ñ 	ú÷	%ñ 	%ú÷	%ñ 	%ú÷	-ñ 	-ú÷
	-ñ 	-ú÷
	-ñ 	-ú÷	.ñ 	.ú÷	/ñ 	/ú÷	'ñ 	'ú÷	5ð 	5ú÷	/ð 	/ú÷	;ð 	;ús�   ¾J3Á"K Â2KÃ&KÄ&K'Å4K4ÆLÇLÇ7LÈ L(ÉL4É55M Ê3J=Ë K
ËKËK$Ë'K1Ë4K>ÌLÌLÌL%Ì(L1Ì4L=Í M	c                 óØ   — t        j                  ddd«      }t        j                  |dz  dz  «      dz  }d}d}t        j                  dg|dz   z  d	d
gz   dg|dz   z  z   «      }|||||fS )Nr   r˜   r?   g…ëQ¸	@r4   r6   g€Ÿqá@H&?r)   r=   r;   )rF   r`   rq  r  )rM   rm   r‹   r/   rÁ  r  s         rP   Ú	_get_xyktzTestMakeSplrep._get_xyktX  sy   € Ü�K‰K˜˜1˜bÓ!ˆÜ�V‰V�A�d‘F˜Q‘JÓ Ñ"ˆØˆØˆÜ�X‰X�q�c˜1˜Q™3‘i 3¨ *Ñ,°¨s°A°a±C©yÑ8Ó9ˆà�!�Q˜˜2ˆ~Ðrf   c                 óÂ   — ddl m} | j                  «       \  }}}}} |||d d …d f   |||«      }t        |||||«      }dD ]  }	t	         ||	«       ||	«      d¬«       Œ y )Nr   ©ÚF©r)   r^   rŽ   rS   rk   )Ú scipy.interpolate._fitpack_repror}  rz  rh  r   )
rM   r}  rm   r‹   r/   rÁ  r-   ÚfÚf_drý   s
             rP   Útest_fitpack_FzTestMakeSplrep.test_fitpack_Fa  sj   € å6àŸ™Ó(‰ˆˆ1ˆa��AÙˆa�’1�d�7‘˜Q  1Ó%ˆÜ�a˜˜A˜q !Ó$ˆØò 	6ˆAÜ™A˜a›D¡# a£&¨uÖ5ñ	6rf   c                 ó„  — ddl m} | j                  «       \  }}}}}t        j                  |j
                  d   t        ¬«      } |||d d …d f   ||||¬«      }t        ||||||¬«      }	t        |||||«      }
dD ]B  }t         ||«       |	|«      d¬«       t        j                   |
|«       |	|«      d¬«      sŒBJ ‚ y )Nr   r|  r@   rR  r~  rS   rk   )
r  r}  rz  rF   rJ   r™   ro  rh  r   rÍ   )rM   r}  rm   r‹   r/   rÁ  r-   r­  ÚfwÚfw_dr�  rý   s               rP   Útest_fitpack_F_with_weightsz*TestMakeSplrep.test_fitpack_F_with_weightsk  s¸   € å6àŸ™Ó(‰ˆˆ1ˆa��AÜ�I‰I�a—g‘g˜a‘j¬Ô.ˆÙˆq�!’A�t�G‘*˜a  A¨Ô+ˆÜ�q˜!˜Q  1¨Ô*ˆä�a˜˜A˜q !Ó$ˆàò 	@ˆAÜ™B˜q›E¡4¨£7°Õ7Ü—{‘{¡3 q£6©4°«7¸Ö?Ð?Ð?ñ	@rf   c           
      ó¬  — dd l mc m} t        j                  j                  d«      }t        j                  ddddt        j                  |j                  d¬«      «      dz  ddddf	   }t        |«      d}}t        |j                  ||«      Ž j                  «       }t        ||«      }|j                  d   |d|z  z
  dz
  k(  sJ ‚t        ||d¬	«       y )
Nr   r€  r”   r•   r˜   r6   r4   rS   rk   )r  Úinterpolater/  rF   rL   r„  rŸ   r‰   r…  r(  rÛ  rk  rå  rf  r™   r   )rM   r1  rŠ   r-   rN   r/   ÚDÚD_denses           rP   Útest_disc_matrixzTestMakeSplrep.test_disc_matrixz  s¼   € ÷ 	7Ð6ä�i‰i×#Ñ# EÓ*ˆÜ�E‰E�!�Q˜˜1œbŸg™g c§k¡k°q kÓ&9Ó:¸1Ñ<¸aÀÀAÀqÐHÑIˆä�1‹v�qˆ1ˆÜ˜#Ÿ(™( 1 a›.Ð)×1Ñ1Ó3ˆÜ˜Q Ó"ˆØ�w‰w�q‰z˜Q  1¡™W q™[Ò(Ð(Ð(Ü˜˜7¨Ö/rf   c                 óH  — | j                  «       \  }}}}}t        j                  dg|dz   z  ddgz   dg|dz   z  z   «      }t        ||||¬«      \  }}}t	        ||k(  «      sJ ‚t        ||||¬«      }t        |d |j                  j                   |j                  d¬«       y )	Nr   r)   r=   r;   r˜   r:  rS   rk   )	rz  rF   r  r   rµ   r   r   r.   r–   )	rM   rm   r‹   r/   rÁ  r  r-   r.   r  s	            rP   Útest_simple_vs_splrepz$TestMakeSplrep.test_simple_vs_splrepˆ  sœ   € ØŸ™Ó)‰ˆˆ1ˆa��BÜ�X‰X�q�c˜1˜Q™3‘i 3¨ *Ñ,°¨s°A°a±C©yÑ8Ó9ˆä�q˜!˜q AÔ&‰ˆˆ!ˆAÜ�1˜‘7Œ|Ðˆ|ä˜!˜Q ! qÔ)ˆÜ˜˜+˜3Ÿ5™5Ÿ:™:˜¨¯©°EÖ:rf   c                 ób  — | j                  «       \  }}}}}t        t        ||||¬«      «      d   }t        ||||¬«      }t        |||||¬«      }t	        |j
                  |j
                  d¬«       t	        |j                  |j                  d¬«       |j                  |j                  k(  sJ ‚y )Nr:  r2   )r-   r/   rÁ  rS   rk   )rz  rt  r   r   r   r-   r.   r/   )	rM   rm   r‹   r/   rÁ  r«   r-   Úspl_autoÚspl_ts	            rP   Útest_with_knotszTestMakeSplrep.test_with_knots’  s’   € ØŸ™Ó(‰ˆˆ1ˆa��Aä”  1¨¨QÔ/Ó0°Ñ4ˆä˜q ! q¨AÔ.ˆÜ˜A˜q A¨¨aÔ0ˆä˜Ÿ
™
 E§G¡G°%Õ8Ü˜Ÿ
™
 E§G¡G°%Õ8Ø�z‰z˜UŸW™WÒ$Ð$Ñ$rf   c                 ó¦   — d}t        j                  |«      }|dz  }d}t        |||d¬«      }|j                  j                  d   d|dz   z  k(  sJ ‚y )Nr^   r6   r)   r:  r   r4   )rF   rJ   r   r-   r™   )rM   rN   rm   r‹   r/   r  s         rP   Útest_no_internal_knotsz%TestMakeSplrep.test_no_internal_knotsž  sT   € àˆÜ�I‰I�a‹LˆØˆq‰DˆØˆÜ˜!˜Q ! qÔ)ˆØ�u‰u�{‰{˜1‰~  A a¡C¡Ò(Ð(Ñ(rf   c                 ó¸   — d}t        j                  |«      }|dz  }t        ||d¬«      }t        ||d¬«      }t	        |j
                  |j
                  d¬«       y )Nr^   r6   rå   rS   rk   )rF   rJ   r   r
   r   r.   )rM   rN   rm   r‹   r  Úspl_is         rP   Útest_default_szTestMakeSplrep.test_default_s§  sM   € ØˆÜ�I‰I�a‹LˆØˆq‰DˆÜ˜!˜Q !Ô$ˆÜ" 1 a¨1Ô-ˆä˜Ÿ™˜uŸw™w¨UÖ3rf   c                 ó°  — d}t        j                  |«      }|dz  }t        «       5 }|j                  t        «      }t        ||dd¬«      }t        ||dd¬«      }t        |«      dk(  sJ ‚t        |j                  |d   «       t        t         j                  |j                  dg|j                  dz   z  f   |d   d¬	«       d d d «       y # 1 sw Y   y xY w)
NrX  r6   rY  r:  r4   r   r)   rþ  rk   )rF   rJ   r   rZ  r[  r   r   r(  r   r-   r   rŸ   r.   r/   )rM   rN   rm   r‹   r\  rc  rY   r  s           rP   r]  zTestMakeSplrep.test_s_too_small°  s¿   € ð ˆÜ�I‰I�a‹LˆØˆq‰DˆäÓ ð 	0 CØ—
‘
œ>Ó*ˆAÜ˜˜A  eÔ,ˆCÜ˜a  a¨5Ô1ˆCÜ�q“6˜Q’;Ð�;Ü˜CŸE™E 3 q¡6Ô*ÜœBŸE™E #§%¡%¨!¨¨c¯e©e°A©g©Ð"6Ñ7Ø ™F¨õ0÷	0÷ 	0ñ 	0ús   §BCÃCc                 óN  — d\  }}t        j                  |«      }|dz  }t        |||¬«      }t        |||d¬«      }|j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚t        ||dd|z   z  z   |d¬«      }|j                  j                  dk(  sJ ‚y )N©r^   r6   r6   rå   çñhãˆµøä>r:  r)   )rF   rJ   r   r.   r  )rM   rN   r/   rm   r‹   r  ru  r×  s           rP   Ú
test_shapezTestMakeSplrep.test_shapeÀ  s�   € à‰ˆˆ1Ü�I‰I�a‹LˆØˆq‰Dˆä˜!˜Q !Ô$ˆÜ˜A˜q A¨Ô.ˆà�u‰u�z‰z˜QŠÐˆØ�w‰w�|‰|˜qÒ Ð Ð ô ˜A˜q 1 a¨¡c¡7™{¨a°4Ô8ˆØ�w‰w�|‰|˜qÒ Ð Ñ rf   c                 óz  — d\  }}t        j                  |«      }|dz  }t        ||dd¬«      }t        ||dd¬«      }|j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚|j
                  j                  d   ||z   dz   k(  sJ ‚|j
                  j                  d   d|dz   z  k(  sJ ‚y )Nr™  r6   r   r:  r)   r4   )rF   rJ   r   r.   r  r-   r™   )rM   rN   r/   rm   r‹   rª  ru  s          rP   Útest_s0_vs_notzTestMakeSplrep.test_s0_vs_notÐ  s³   € à‰ˆˆ1Ü�I‰I�a‹LˆØˆq‰Dˆä˜A˜q A¨Ô+ˆÜ˜A˜q A¨Ô+ˆà�w‰w�|‰|˜qÒ Ð Ð Ø�w‰w�|‰|˜qÒ Ð Ð à�w‰w�}‰}˜QÑ 1 q¡5¨1¡9Ò,Ð,Ð,Ø�w‰w�}‰}˜QÑ 1¨¨A©¡;Ò.Ð.Ñ.rf   N)r  r	  r
  rx  rz  r‚  r†  r‹  r�  r‘  r“  r–  rZ   rh  rj  r]  r›  r�  r  rf   rP   rt  rt     sY   „ ò5;ònò6ò@ò0ò;ò
%ò)ò4ð ‡[�[×Ññ0ó ð0ò!ó /rf   rt  c                   ó¶   — e Zd Zd
d„Zej
                  j                  dg d¢«      d„ «       Zej
                  j                  dg d¢«      d„ «       Zd„ Z	d„ Z
d„ Zy	)ÚTestMakeSplprepc                 ó²   — t        j                  |«      t         j                  z  |z  }t        j                  |«      t        j                  |«      g}|||fS r´  )rF   rJ   r•  rq  rs  )rM   r}  r/   rm   r‹   s        rP   Ú_get_xykzTestMakeSplprep._get_xyká  sB   € Ü�I‰I�a‹Lœ2Ÿ5™5Ñ  1Ñ$ˆÜ�V‰V�A‹YœŸ™˜q›	Ð"ˆØ�!�Qˆwˆrf   rÁ  ©r   rˆ  gü©ñÒMbP?rš  c           
      ó8  — d\  }}t        j                  |«      t         j                  z  |z  }t        j                  |«      t        j                  |«      g}dddddœ}t        ||¬«      \  \  }}}}	t        ||¬«      \  }
}t        ||	d¬	«       t        |
j                  |d¬	«       t        |«      ||   k(  sJ ‚t        j                  |«      j                  }t        |
j                  |d¬	«       t         |
|«       t        |||d
¬«      |«      d¬	«       y )Nr™  rX  rº   rw  r^   r¢  rv  rS   rk   r)   r  )rF   rJ   r•  rq  rs  r   r   r   r-   r(  rs   r›  r.   r   )rM   rÁ  r}  r/   rm   r‹   Ú	num_knotsr-   r.   Úu_r  rö  rÝ   s                rP   Útest_simple_vs_splprepz&TestMakeSplprep.test_simple_vs_splprepæ  sú   € ð ‰ˆˆ1Ü�I‰I�a‹Lœ2Ÿ5™5Ñ  1Ñ$ˆÜ�V‰V�A‹YœŸ™˜q›	Ð"ˆð  ¨%°uÑ=ˆ	ô    Qœ‰‰	ˆˆAˆq�2Ü˜a 1Ô%‰ˆˆQô 	˜˜2 EÕ*ô 	˜Ÿ™˜q uÕ-Ü�1‹v˜ 1™Ò%Ð%Ð%ô �Z‰Z˜‹]�_‰_ˆÜ˜Ÿ™˜r¨Õ.ô 	™˜A›Ø0œ  1 a¨aÔ0°Ó3¸%ö	Arf   c                 ó|  — | j                  «       \  }}}t        |t        «      sJ ‚t        j                  |«      d   dk(  sJ ‚t        ||¬«      \  }}t        t        j                  |«      |¬«      \  }}t        |||¬«       t        |d   |d   d¬«       t        |d   «      t        |d   «      k(  sJ ‚t        |d   |d   «      D ]  \  }}	t        ||	d¬«       Œ |d   |d   k(  sJ ‚t        j                  t        ||«      «      t        j                  |«      k(  sJ ‚t        ||¬«      \  }
}t        ||d¬«       t        |
j                  |d   d¬«       t        |
j                  j                  |d   d¬«       |
j                  |d   k(  sJ ‚ |
|«      j                  t        j                  |«      k(  sJ ‚t        t        j                  |«      |¬«      \  }
}t        ||d¬«       t        |
j                  |d   d¬«       t        |
j                  j                  |d   d¬«       |
j                  |d   k(  sJ ‚ |
|«      j                  t        j                  |«      k(  sJ ‚t!        t"        «      5  t        t        j                  |«      j                  |¬«       d d d «       y # 1 sw Y   y xY w)Nr   r4   rv  rk   rS   r)   )r¡  r   rt  rF   r™   r   rs   r   r(  r   r   r   r-   r.   r›  r/   rB   rD   )rM   rÁ  r«   r‹   rY   rö  Útck_aÚu_ar°  r±  r  s              rP   Útest_array_not_listz#TestMakeSplprep.test_array_not_list  sB  € ð —-‘-“/‰ˆˆ1ˆaÜ˜!œTÔ"Ð"Ð"Ü�x‰x˜‹{˜1‰~ Ò"Ð"Ð"ô ˜˜a”‰ˆˆQÜœRŸZ™Z¨›]¨aÔ0‰
ˆˆsÜ˜˜3 QÕ'Ü˜˜A™  a¡¨uÕ5Ü�3�q‘6‹{œc %¨¡(›mÒ+Ð+Ð+Ü˜#˜a™& %¨¡(Ó+ò 	0‰FˆB�Ü˜B ¨Ö/ð	0à�1‰v˜˜q™Ò!Ð!Ð!Ü�x‰xœ˜a ›Ó&¬"¯(©(°1«+Ò5Ð5Ð5ä˜a 1Ô%‰ˆˆQÜ˜˜3 UÕ+Ü˜Ÿ™˜u Q™x¨eÕ4Ü˜Ÿ™Ÿ™  q¡°Õ6Ø�u‰u˜˜a™Ò Ð Ð Ù�1‹v�|‰|œrŸx™x¨›{Ò*Ð*Ð*äœbŸj™j¨›m¨qÔ1‰ˆˆQÜ˜˜3 UÕ+Ü˜Ÿ™˜u Q™x¨eÕ4Ü˜Ÿ™Ÿ™  q¡°Õ6Ø�u‰u˜˜a™Ò Ð Ð Ù�1‹v�|‰|œrŸx™x¨›{Ò*Ð*Ð*äœ:Ó&ñ 	/ÜœŸ™ A›Ÿ™¨AÕ.÷	/÷ 	/ñ 	/ús   É>+J2Ê2J;c                 ót   — | j                  d¬«      \  }}}t        |«      \  }}t         ||«      |d¬«       y )Nr^   r|  rS   rk   )r¡  r   r   )rM   rm   r‹   r/   r  rö  s         rP   Útest_default_s_is_zeroz&TestMakeSplprep.test_default_s_is_zero'  s5   € Ø—-‘- "�-Ó%‰ˆˆ1ˆaä˜a“‰ˆˆQÜ™˜A› ¨Ö.rf   c                 óp  — | j                  d¬«      \  }}}t        |d¬«      \  }}t        |d¬«      \  }}t        ||d¬«       t         ||«      |d¬«       t         ||«      |d¬«       |j                  |j                  k(  sJ ‚|j                  j
                  |j                  j
                  k(  sJ ‚y )Nr^   r|  r   rv  rS   rk   r¨   )r¡  r   r   r  r.   r™   )rM   rm   r‹   r/   r•  Úu_iÚspl_nÚu_ns           rP   Útest_s_zero_vs_near_zeroz(TestMakeSplprep.test_s_zero_vs_near_zero-  s˜   € à—-‘- "�-Ó%‰ˆˆ1ˆaä! ! qÔ)‰
ˆˆsÜ! ! uÔ-‰
ˆˆsä˜˜S uÕ-Ü™˜c›
 A¨EÕ2Ü™˜c›
 A¨DÕ1Ø�z‰z˜UŸZ™ZÒ'Ð'Ð'Ø�w‰w�}‰} §¡§¡Ò-Ð-Ñ-rf   c                 óø  — t        j                  dt        ¬«      }t        t        «      5  t        |«       d d d «       t        t        «      5  t        |d¬«       d d d «       t        t        «      5  t        |d¬«       d d d «       t        |gd¬«      \  }}t        |gd¬«      \  }} ||«      j                  dk(  sJ ‚t         ||«      |gd¬	«       y # 1 sw Y   Œ¢xY w# 1 sw Y   Œ‰xY w# 1 sw Y   ŒpxY w)
Nrº   r@   r   rv  rˆ  rš  )r)   rº   rS   rk   )	rF   rJ   ro  rB   rD   r   r   r™   r   )rM   rm   rY   r¥  r  rö  s         rP   rd  zTestMakeSplprep.test_1D:  sÖ   € Ü�I‰I�aœuÔ%ˆÜœ:Ó&ñ 	Ü�AŒJ÷	ô œ:Ó&ñ 	!Ü˜˜aÕ ÷	!ô œ:Ó&ñ 	#Ü˜˜cÕ"÷	#ô ˜1˜# Ô&‰ˆˆRÜ˜q˜c TÔ*‰ˆˆQá�1‹v�|‰|˜vÒ%Ð%Ð%Ü™˜A›  ¨%Ö0÷	ð 	ú÷	!ð 	!ú÷	#ð 	#ús#   «CÁC$Á3C0ÃC!Ã$C-Ã0C9Nr™  )r  r	  r
  r¡  rZ   rh  ri  r¦  rª  r¬  r±  rd  r  rf   rP   rŸ  rŸ  à  se   „ óð
 ‡[�[×Ñ˜SÒ"6Ó7ñAó 8ðAð: ‡[�[×Ñ˜SÒ"6Ó7ñ /ó 8ð /òD/ò.ó1rf   rŸ  ré  )é#   r6   r]  )r)   )gr  rL  rS  r`  r]  ÚnumpyrF   Únumpy.testingr   Úscipy._lib._array_apir   r   rZ   r   rB   rÐ  r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   ro  r‹  r”  Úscipy.sparse.linalgÚsparser×  Úscipy.interpolate._bsplinesr   r   r   r   r   r   r   r   Úscipy.interpolate._fitpack_implrˆ  Ú_fitpack_implrö   Úscipy._lib._utilr    Úscipy._lib._testutilsr!   Úscipy.interpolate._ndbspliner"   r#   r  r$   rþ  r%   r'   rl  r«  r®  rz   r{   rØ   rl   rÕ   rX   rª  rá  r  rƒ  r�  rh  ri  rÙ  r¢  rÛ  rô  rë  rø  rú  r   r"  rC  r  r:  rI  r_  rÍ  rü  r"  r*  r,  rf  rh  rt  rŸ  r  rf   rP   ú<module>r¿     sÊ  ðÛ 	Û Û Û Û ã Ý +ß BÝ *Û ÷÷ ÷ ÷ õ õ
 ß !Ð !÷Eõ E÷ HÑ Gç /Ð /Ý &Ý 9õ 5å 3Ý -Ý &÷y	)ñ y	)÷vM$ñ M$ò`6ò.ò&
Gò>òòHóó$+ò÷$_)ñ _)÷D}?ñ }?ò@ó8ð8 !Ÿ+™+×1Ñ1°(¸YÈÐ<MÓNÐ ÷y:ñ y:÷xñ ó>)òX	ò÷(d+ñ d+òN*÷
F3ñ F3òV
òò7÷:"ñ :"÷zG4ñ G4÷TNGñ NG÷ba ñ a òLò(÷.a+ñ a+òH÷2+ñ +÷\}/ñ }/÷@i1ò i1rf   