ELF>4@&@8 @""Qtd000IKIKPtdppp \ll8-P-Rtd\ll0$$0PP` ` XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXi P&y w@ii ui Zӯkt)lPCm@BmpBmCmmH`PȘmؘ@I0`]P (X8@HOX``hHx  M Jș|ؙ@x+pg`r o(o0o 8o@oHoPo'Xo,`o1ho2po6xo8o9o:o@oAoEoFoHoQoToUoVoXo\o^oaob [(Op p(p0p8p@pHp Pp Xp `p hpppxppppppppppppppp p!p"q#q$q%q& q((q)0q*8q+@q-Hq.Pq/Xq0`q3hq4pq5xq7q8q;q<q=q>q?qBqCqDqFqGqIqJqKqLqMrNrPrRrS rW(rY0rZ8r\@r]Hr_Pr`HH?Ht[H5?%?@%?h%?h%?h%?h%?h%?h%?h%?hp%?h`%?h P%?h @%?h 0%?h %z?h %r?h%j?h%b?h%Z?h%R?h%J?h%B?h%:?h%2?h%*?hp%"?h`%?hP%?h@% ?h0%?h %>h%>h%>h%>h %>h!%>h"%>h#%>h$%>h%%>h&%>h'p%>h(`%>h)P%>h*@%>h+0%>h, %z>h-%r>h.%j>h/%b>h0%Z>h1%R>h2%J>h3%B>h4%:>h5%2>h6%*>h7p%">h8`%>h9P%>h:@% >h;0%>h< %=h=%=h>%=h?%=h@%=hA%=hB%=hC%=hD%=hE%=hF%=hGpH}H9tLLwHD$HS:HxH9tLzHD$0HxH9t Ht$(bH:HD$8HxH9t Ht$BHD$(HxH9tL,HD$ HxH9tLHD$HxH9tLHD$HxH9tL gHD$0HxH;=9tL HHu,4HHPHH9H8y41hH HXHIu4HHPHH9H8/1IHELH)HtH贚LHIu4HHPHH;9H81IHELH)HtHXLL)HMtL=LHHHPHH8H8[1HD$HHxH9t Ht$ W HD$8HxH9tHA HD$0HxH9tH+ HD$(HxH9tH HD$@HxH9t Ht$8 LHD$@HxH;=7tH LHD$(H7HxH9tH I|$H9tH LzuH-HeIHELH)HtHL=HIuHHPHH|7H8E1?"I|$H9tL LHEHxH;=6tL HHEHxH;=6tL HHEHxH9t H HEHxH9t Hh HEHxH9t Hh HEHxH9t Hhg HEHxH9t HuQ L)HEH6HxH9tHh) I}H9tL LHEHxH;=5t Hh LHPH`H)Ht H`WLHIu>1HHPHH5H8v1H`H1&IHLHH9t Hh[ LIuNHHPHHz5H81(0HEHxH;=4t Hh HHHHEHxH9t HuHEHxH9t HhL`HEHu4HxH9tLHEHxH9t HuL^I}H9t HxiLAHEHxH9t HuKHEHxH9tL6HEHxH9tL!HEHxH9t Hu HEHxH9t HxHEHxH9t HxHEHxH9t HxHEHxH9t HuLHEHxH;=Y3t HxL[I|$H9t HxeL=HuVHHPHH3H8E12HEH2HxH9THxCHEHxH;=2tLHHsHHEH2HxH9t HHHEHxH9t HuLmHHHPHH2H8CE1AI|$H9t HH@LHEHxH9t HWHEHxH9t HHHEHxH9t HHHEHxH91HH HEHxH;=1t HHLH9HqH=1t G GPWJH$H$H)HtHْH$L)MtLH$HD$0H)HtH褒HH$H$H肒H$HD$8H)HtHeHH$L)MtLEH$H)Hu뱿D$L$[D$HLH5^0HH w&H&1L|HL% 0L$HLH$IT$HH$HxL9t Ht$tH$HxL9tL[H/H5m0HHfDMuHeL[A\A]]ËuH=yI@AWH1H5AVAUATUSHXHL$HT$HD$LL$ LD$ HD$HD$ H|$ fH|$ JtvH|$ 2t^HT$HD$ HJ HHH H1H9uYHL$HzLHDD$ LY LQI LHQHHHDAH HwHl$HLd$@-C4>HLEHt$@FbLAIcviH H(\(@LHHHIHILHLHH)LMEDLQQF EFABH='wAE0I HIH?I?H1H)H HcHH'HAHKY8m4,DH?BHH HHHDAH HwLl$(C47H-LSHD$(EPIAHcvfH [H(\(HHHHHHHHHHHH)HHDDDQQE>AAA>H='wC0H 7A 1LH˻HHtH|$0H5HT$0HSHzHHT$8HSHHT$8HD$@LBHHLH;Jv H;H.H|$8LHH5^HHT$HHSHHSL HHD$HHxH9HD$8HxH9#HD$0HxH9HD$(HxH9yHD$@HxH9;H{LH8I|$H91 HTXXAVH BDiFBi@fDLPHD$(fDL8Ht$@fDL1LKH=[AD$PAT$QH1V@Dx[DpDpDx+DpDx H=PJHH@H=SPJHhH[H='PJH*HH=PJHHt$ H=u/PJHHAD$PκPPZPPhAAjA_AAIA>AAHHLIzIIIzHIHIIIUHH5ƷHAWAVHEHMAUHULMATLESHXHEPHEP1HEHEZYH} oH} TtH} 9YDeLuLmH]ExHEDHH9L$H+L#N< HxHEHI9t IT$1HC HHUE1E1 HHEIE H@HEH!@HxjjjIH HIE MIv IUL@I~uLcMAt$QHcMQHK 1HH6s>H0HEHFLHH)]v3LmH}-LsIHMAHH5DDHiQH%kd)DAԉD@FDS'wAD$0A vH,EAT$B QH1L0HL HSHHEHxH9RHLH8I|$H9t*H=PAD$PAT$ L{E1HeL[A\A]A^A_]HEE1k~fDAA  AcvdAxDHKY8m4A'wcv7=M='vuHHуHH Hw)DsLmH}-LAvIHMAxDLHMHAc VH=u/PJHLIAD$P1AZH= >IHHHIHUHH5-HAWAVHEHMAUHULMATLESHHEP1HEHEEZYmH} RH} 7H} HEL}LuHXIG L IF L9 ELm LeHHEH;HhL1ɿHӿHhH;HhL1ɿHHIŋEDHH91HHrHhHM ˆOH4HxH`HPHH9t HS1\O-HXHMNIHhHA HQHM`DEQMAuvLQH(OH}H0IH:L`IH:Hh`HLL1H=jH`H\HPHH)HhqHhHe[A\A]A^A_]LLMH?I?H1H)H HcHH'HAHKY8m4-fDH?B{HHHHHDAH HwHELe-Ct=HLHhHuEFLAHcvlH H(\(HHHHIHILHHHH)HLEDLQQF EEABH='wC0H vH DYFYIF HHIH?I?H1H)H  HcHH'HAHKY8m4/H?BH.HQHHHDAH HwLmHhC4>-LHEEPmIAHcvlH H(\(HHHHHHHHHHHH)HHDDDQQE?A~AA?H='wC0H vHTXXAWA 1LHHH H}H5cHUHSH$HH}H56HUHSH HHUHSHHUHELBHHLH;Jv H;HHhLHSL(HHEHxH9GHEHxH9bHEHxH9HEHxH9HEHxH9sH+ LH8@I}H9t'H=O 2AEPAU Lf1He[A\A]A^A_]HDž`HDžPHhHtHx HHt1MtIEx HIEt 1)Lx1HhfDLHELHuDhDpL1LsmfDDpDhkDh[DpH= PJHnHh]H= PJH-HhH= PJHHhTH=g u|PJHH(H=; ukPJHHhrAEPpP1P끺PPA{ApAAAOADAAH=;nIIII0IMHHlHIHIISIdff.fUHH54HAWAVHEHMAUHULMATLESHPHEP1ZYH} H} qH}VH};H}h H}MHEHuH]LUHXHEHpL}HHHF HPLpLHCMJ H8HHWHH9uIHpMHLeE1E1HQ1LLm L`IHxjjjLhLE1E1HxH1HHxjjjffɿIH0I*fH H*HxMIMLhL`IJHLLHXLHIB L@HpHxHxpHHSAt$pIG 0HPAwp ?AH@xmH0L`IH0Hx`HLL1H=UD1He[A\A]A^A_]1؉pAc=»='HKY8m4!fc=='HHуHH HwƉpHEL}޺-HLHhHMAmA}apH5 ADEHHiQH%kdAӉ)D@FDSA'wDpp؃0 vHۍSQHܤ 1LHH5H5ȤHhHUHSH:HSHHHEIHxH9HEHxH9HLH8IH9H=AGPAWHhf.Mݻ%LHMpDp6p(H=puYPJHBHh11H=Du7PJHHuAG2P릃PȻmUIIeHIuIIHIHxIIDUH1H5HAWAVHMHUAULEATSHhHEHEH} H} lH]LmHS HHIIE H90HMH9LrHMHHUH@E1E1 HEH+HxjjjIH HIE MEHLH{HMLLHAt$.(XZ f.E1HeL[A\A]A^A_]HHI?H?H1H)H  Hc H H' HAHKY8m4(H?BHHHHHDAH HwHELe-C4>HLHxHuEFfLAHcvmH H(\(HHHHIHILHHHH)HLEDLQQF EFABH='wC0H IE HHIH?I?H1H)H ! HcN H6 H'J HAHKY8m4.H?B{HHHHHDAH HwLmHxC4>-L(HEEPIAHcvlH 1H(\(HHHHHHHHHHHH)HHDDDQQE?A~AA?H='wC0H ?A 1LH趾HHDH}H5HUHSHLHHUHSHHUHELBHHLH;JvH;HwL1LR H}LHHxH5HUHSH޽HSL HHEHxH9HEHxH9HEHxH9HEHxH9HEHxH9HHLH8]I|$H9XE1HyTXXAWH YDYFY)LHuLHEHHIH?I?H1H)H HcMH^H'`HAHKY8m4-fDH?BH"H$HHAHH HwHELe-Ct5HLHxHuEFhLAHcvoH $H(\(f.HHHHIHILHHHH)HLEDLQQF EEABH='wC0H vH DYFYH]HIH?I?H1H)H THcHH'HAHKY8m4*H?BHHHHAHH HwLmC4>L-L跽HEEPIAHcvkH H(\(fDHHHHHHHHHHHH)HHDDDQQE?A~AA?H='wC0H vHLTXXAWA1LH6HHH}H5~HUHSH̹HHUHSHHUHELBHHLH;Jv H;H~HxLLHSL(HHEHxH9HEHxH91HEHxH9HEHxH9HLH8I}H99E1fDDpDp;DpDpDpsDpHx褸HuL萸HEAAAAAA{AAAAAANHxL1L{H=AD$PAT$HxȹtH=PJH5Hx蘹$H=PJHHxhH={PJHHx8H=KpPJHaHu SH=PJHVHx۸EH=AEPAUHx詸H=fPJHFL}9H=IPJH+LQH=d<PJHHu$H=7PJHLP8PAD$P9PPKAXAAAA,A!AA P(PPAEEPAAI=HIJI`IuI޿HIHIIHH@HInI:IIKIdH.I(ff.UHH5ڔHAWAVHELMAUHhH`ATLESHHEPHxPHXPHpPH\PHEP1HDž`HDžhHDžpHDžxHEHEHEH0H` Hh H}H}iH}NHp 0pHxRH}7HhH`HMLUL]HHH@ H@LpLxL HC LuHPI9~HcXHL0E1E1 HfHnL8HUflHxjjj)EL8L0H HIHHHC HcXH{HQ MJHIH@LBHPVAt$Iv 6AvAwIu 6\AuVAsH0sU"HP E1HeL[A\A]A^A_]HHIH?I?H1H)H Hc)H H'HAHKY8m40fH?BHHHHAHH HwHELm-C4>HLHH茳HuEF2LAHcvhH H(\(HHHHIHILHHHH)HLEDLQQF EFABH='wC0H vH $DYFYLLH?H?I1I)I yIcII'LAHKY8m4.H?BdHHHHHAHH HwLuHHA4-L+HuۋFHAIcvhH 5H(\(LHHHIHILHLHH)LMEDLQQF EGABH='wAD$0I vH“BT`B`V1LH!謮HH:H}H5 HUHSHBHHUHSHHUHELBHHLH;Jv H;H?H}LŰHHHH5̎HUHSH ߭HSL HHEHxH9YHEHxH97HEHxH9HEHxH9HEHxH9HILH8^I|$H9E1L`Hu.LOHuAAAAAAAPAAAAA2AAL1LHHĿOHH賿HH袿HH葿HH耿HWoAAI選HH鴸II+IIVHIgHIIܸff.ATH=UHIHH5،LHI$xHI$HHiH9E1H襮HUHRx HHUt|H=H-NHHH=]A\zf.L踬JH訬Hp@HH8蹬u%H1H52H8芭H1]A\ H=蟬IH뼐HH5H8JHExHHEuHH5HwH81荫cHaH5BH8HHFH5H8׬-H)H5H813 HH5يH8蘬AWHcAVAUATIULSH(H|$I|Hؐ$ID)ȉL$D$Hc$f(ADiLHD$HD$NtJfDJH$#HE$HǸE@f(L\\^YXDDf(\YDHL9t%Af.zuHDHL9uLxIM9Y\$A9Lct$NlHT$HcHHL4HD$IHIfDLHL)BHEHǸ4f\*YD^L\DLH9|$A Af.zuHIE9}܃IA9xH([]A\A]A^A_ÉÃA9|HcD$M,uHc$HD$Dt HcEL<DOLHbIHEHD9~Hc$HD$A9H([]A\A]A^A_ff.fHcf(H)L Hf.f/EH9~H9|9BTHPHH9t~f/s vfDH9tcHHf/ s@Lf/w OH9tHHf(f/wf/{mfHHBTHQaff.AWAVAUATUSH(H$H$LD$0H;$hPIIL;$h HBHD$pH$hH$`ML$HHD$xH$H$`HHH@HH$HLH$HJ4H$HIH\$(H\$pHt$hLH$HHHH$HHHH$LMHD$H$`IHHH$H$`HIH$H\$xH|$0HHD$ H9H9$$H9| @HD$ L$`H$HT$LH$IHIHT$MJ II\HI)H$I I,ֺIHhHD$dH+%(u H ]A\A]whIvf.DHHHf.UHH]ff.@AUIH5EATIUH dH%(HD$1HH?HL_gLWHLLiHgHD$dH+%(u H ]A\A]gIvf.AUIH5DATIUH dH%(HD$1HHHLfLwLIHLLHfHD$dH+%(u H ]A\A]gIyuf.DHgHHf.UHH].ef.@H'HHf.AUIH5CATIUH dH%(HD$1HHHLeLHLLHeHD$dH+%(u H ]A\A]fItf.AUIH5BATIUH dH%(HD$1HHHL?eLLI,HLL>HeHD$dH+%(u H ]A\A]weI tf.DHHHf.UHH]cf.@AUIH5BATIUH dH%(HD$1HHOHL_dLWHLLiHbHD$dH+%(u H ]A\A]dIDsf.AUIH5AATIUH dH%(HD$1HHHLcLwLIHLLH6bHD$dH+%(u H ]A\A]dIrf.DHgHHf.UHH].bf.@AUIH5@ATIUH dH%(HD$1HHHLbLHLLHdHD$dH+%(u H ]A\A]2cIqf.AUIH5@ATIUH dH%(HD$1HHoHL_bLLILHLL^H&dHD$dH+%(u H ]A\A]bIiqf.DHHHf.UHH]`f.@af.HGHGHGf.fATUSHHHLfdH%(HD$1H;H.HLtHtyL$$Iw@Iu*ECLcB'HD$dH+%(uUH[]A\ÐMt$fHH1sHHH$HCLH`L$$H;H=JF`PaATIUHSHHHdH%(HD$1HH;HtHtzL$$IwAIu+ECLcB'HD$dH+%(uVH[]A\fMt$fHH1HHH$HCLH_L$$H;H=EE_`ATUSHHHLfdH%(HD$1H;H.HLtHtyL$$Iw@Iu*ECLcB'HD$dH+%(uUH[]A\ÐMt$fHH1HHH$HCLH_L$$H;H=D^_ATILA\LHI9t L<_@HGHHHFH9t-HHVHWHVHHFHWFf.oFGDATISHHCHH6H?HSH9thIL$H9t>I4$IL$IT$HSIT$Ht4H;HKHCLH[A\DI4$IT$HSIT$HHfDHtHt]HSI<$IT$H;fCHSI<$H7f.fHwf.Hf.fHGf.HGf.Hwf.HHw0@HGH;DH?H>H9w=H9v/HH9s'H9vH@H]f.HHHq]PH=B[@LHI9t L,]@H?]USHHHt$Hw:H?HHtHtI@H[HD$H;HCH[]fDHt$1HHHD$HC@/HD$H;HCH[]fDhHf.fHf.fHOHH9wVH=AHH1.,f.@H?HH+wH9rPHZHGH)H9HGÐHAH9w HGH9ADHtHu@[[fHtHu@\fIHtHuÐL5ZDf.H)HtHuÐZfH)HtHuÐZfH)HtHuÐZfH)HtHuÐZfH)HHMf.DAVAUATUSHdH%(HD$1H9t2L/LwLfHHM9HWL9rTMu/LcCD%HD$dH+%(H[]A\A]A^@HuIt^LLYL+fDHHL$$iH;II9tYH$L+HCMtefDAEL+Z,Zf.fAWAVMAUATLgUHSHH(H $HOIdH%(HD$1HHD$I)LH)HHD$L;'HWHt$HIHtH3HHHXH<$tMtIfDA$H;iA$CfDHGH9t'HGH9Gr@H1HHQTf.HHGÐHHHfHHfHWH9sHHPH=91!#HWH9sHHPH=81#Hf.fHf.fHGHHDHGHHDAUHWATIUSHH_HLkH9tMHWI9w$@,I$Ml$DHL[]A\A]@A11HLI$DfAUHWATAUSHHHoHLmH9tLHWI9w#D$(HLkD(H[]A\A]A11HH+HfDfATILA\ATISHHCHH6H?HSH9thIL$H9t>I4$IL$IT$HSIT$Ht4H;HKHCLH[A\DI4$IT$HSIT$HHfDHtHtPHSI<$IT$H;fCHSI<$HHOH9wCHHt*HuHH)H|$H9HF\HD$HfHHw2HHH=>61H56 UHSHHH+HHEHH[]fDUHSHHHH)HGH9tH)HHH[H]DHoHH[H]@HHGHpHDH?AVAUIHATUSHOH)I9ILH?IH)ID$DHH9ID$H9rkJ2H)t%L9t LH4LHHPI<$MtLIt_@LNI<$I\$L[]A\A]A^f.LM1L`I<$MtDffD@/I<$I<$MtuH=4qMHHwD1f.@AHWH1Ef.DHOH9w H1PHH=41H54PUDHSH1HH+HNHEHH[]LOLH)H9HFL9w E!PHLH5]4H=31DH)EH+7ATHWIDƹ1LA\ÐUDHHSH1HH+HHEHH[]fLOI9rv HHw0fHDL1L)lf.f1fH?AWAVAUIATLUSHHWH)I9MHIHOM)IJ:H9HOH9]L 0ILI)@M9!L9vw@t2K4)K<IPLLD$L $MLD$L $fDMtILLLLI$I\$HL[]A\A]A^A_@HI9wMM9ILLLLT$L$5M@L$LT$It@K4)K<ILLD$L $LLD$L $M9XMKI9M9K4>IM(LL KLLLDAA@fDXfDAA@0WItMLLL+LfD"fDM)ItEMtLLLL$KL$ILK4K<)L)HtH97J/AAAH=0ILNMI)I9LGHL9wHHW1 PLH501H=/ IHWH1f.DIHWH1f.DATIUHHH HHUHLHI]1A\LOLH)H9HFL9wePHLH5/H=(/1yfATIHWIH1*LA\@ATIUHHH{GHUHLHI]1A\IHOH9w H1PHH=.1H5`/HOLBL H9w L1PHH=s.1H5,/f.LAL HOHH)H9HFH9wL[PHH=(.1H5.rfAUIATIHUHFIL$H9wLHL]IA\1A]HH5.H=-1 AUIATIHUHSHHBFIL$HH)H9HGH9wHLH[L]IA\A]HH50.H=g-1LWIL+H)LL)H9HGM9wLYPLLH5-H=-1mf.LWIL+H)I)LL)H9HGM9wLPLLH5-H=,1f.LWIL+H)I)LL)H9HGM9wLPLLH5B-H=y,1f.LWIL+H)LL)H9HGM9wLiPLLH5,H=,,1}f.LALIH)HOL+HL)H9HGI9w LLPLH5,1H=+&fDAUIATIUHHSHL)H?DHMLH+uIHHH)H9HGH9wHLH[]A\A]HH=e+1H5,f.DLWIL+H)I)LL)H9HGM9wLFPLLH5+H= +1Zf.LWIL+H)I)LL)H9HGM9wLPLLH5+H=*1 f.IHOH+7H9w H1PHH=*1H5=+f.@ATISHHOH+7IH9wHH1jHH[LA\HH=**1H5*t@HLQHLH MI)M9MGL9w"LOHLH)H9HGL9w!HLH5*H=)1HLH5p*1H=)HHHLHLH)L9LFHL9wLOHL9w#1HLH5*H=M)1HLH5)1H=0)ATISID$HLOH?IH9tYID$H9w/HtLHtIBI<$I\$LH[A\@IHL1LeI<$륐I<$DHVH6d@HVH6T@LNH6LH)H9HFL9w HH,PLH5O)1H=@(H?H+GH9wPH=)Af.ATIUHHH@HH?H+EH9rHLH]A\H=(@ATIUHHH;@HH?H+EH9wHLH]A\SH=z(w@H?H+GH9w(PH=N(K@f.H?H+GH9wPH=(@f.ATLgIHL9w;I)I9LGMtH7ItLL@LA\fDALA\HLH5'1H=&fH9t]HHOHLFH9tPLOI9twHHHFHGLNHFHWHGHV@FHGHFHHGDI9tCHFoWVHHWLHGHFHGHVo^_HHHHFt%oGHtoNFHWOHF\1HPofgHFHGHHFDHf.fHf.fHf.fAWAVAUATUSHHGHIH9vrIHL,H)HL$H<I9wWL)HHtGD6ID?HHt)LLH=tMH{LH)I9wHHuIHL[]A\A]A^A_DH9HHCIDH+\$If.@HNH6@AUIATIHUHHH)HLEHL[A\f.AUATIUSHHGH9wAH)HL/HH9HFIHt&K|%HHKIq>UH)IH/): HATSHHĀfo-*fo%2dH%(HE1Hfo$fo,Hfo 0fo8HUH)ELd$pIeIT$`I|$hHLA),$A)d$A)\$ A)T$0A)L$@A)D$P]UME-ADhLC-UIHLJHHATSHH0dH%(HE1LT$IMJL@HIHHHHHI)C HHH wI)MI9w-M)LLIr--DH]dH+%(uHe[A\]ø-fDAVIAUATLd7USEL9,HIHEHHt{L9<%uC m = OOOOOiOiOOExpected data points in -D space, got -D points.numpy._core._multiarray_umathnumpy.core._multiarray_umath_ARRAY_API_ARRAY_API is NULL pointer_dierckxfpknotfpknot replacementfpbackqr_reducedata_matrixevaluate_splineevaluate_all_bsplfind_interval_coloc_norm_eq_lsqevaluate_ndbspline_coloc_ndcannot create std::vector larger than max_size()Cannot do derivative order nu= _ARRAY_API is not PyCapsule objectmodule compiled against ABI version 0x%x but this version of numpy is 0x%xmodule was compiled against NumPy C-API version 0x%x (NumPy 1.23) but the running NumPy has C-API version 0x%x. Check the section C-API incompatibility at the Troubleshooting ImportError section at https://numpy.org/devdocs/user/troubleshooting-importerror.html#c-api-incompatibility for indications on how to solve this problem.FATAL: module compiled as unknown endianFATAL: module compiled as little endian, but detected different endianness at runtimenumpy._core.multiarray failed to importbacksubstitution, triangular matrixrow-by-row QR triangularization(m, k+1) array of non-zero b-splines0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989900010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899find_interval: out of bounds with x = Internal error. Please report it to SciPy developers.%fvector::_M_realloc_insert??}Ô%Ibasic_string::_S_construct null not validbasic_string::_M_construct null not validbasic_string::_M_create%s: __pos (which is %zu) > this->size() (which is %zu)basic_string::at: __n (which is %zu) >= this->size() (which is %zu)basic_string::erasebasic_string::_M_replace_auxbasic_string::insertbasic_string::replacebasic_string::_M_replacebasic_string::assignbasic_string::appendbasic_string::copybasic_string::comparebasic_string::basic_stringstring::stringbasic_string::substr0123456789not enough space for format expansion (Please submit full bug report at https://gcc.gnu.org/bugs; O @p 1 x  0l Kkt%}08 %"`#@##M$Lx%%@&P&t`&p&&t&&`&&4&&&X '',*':' J' Z' j'p!z'!'D"'"'T9'$(4( 0) 0. . @0( 2 4 `6 P>4BMPSHaj@lTno|~dЀL0H@dpP`l0P(DФ4 @`pЦ8Ttp`,0@P(px0PLP p0`D\x0б 0 L 0d `!!8!0!д!! "\"@"`""" #p@#0t### #p#0 $@4$PH$`\$pp$$$$$$0$@%л4%H%\%p%0%P%`%%%%%&0$&P8&pL&`&&&`'0'D'X'l'`'''P'`'p((,(@(T(h(|((((( (0(@)`)`))))))0)P)` *p *4*H****`+0+X+P+p+++,$,0L,p`,t,,,, ,,-0@-PT-ph----0-`-.$.0P...@...0.,/@/PT/h//`//`/p 0 040H0@t0000`0p11(1<11111,2@2l22223(3Pt3`3334 (4PT4h44404p45PH5t5p556,6@6`666 7P@7pT707P7`77$888L8``8pt888808@8P9Pp9099zRx $ FJ w?;*3$"D 3zPLRxt D$,.BBB D(D0Fp  0A(A BBBH (zPLRxat p0.("D0a8F@R8A0Q A F0#c.Ax [.S F G A $zPLRxs  ,GG.4P$pC.AM a.0H H ,zPLRxEs  4\-8&-AM a. } H P H \-@$'-AM ]. I K P H P.W A (zPLRxer  0-d(s-BNB B(A0A8D 8A0A(B BBBI F 8A0A(B BBBH ,zPLRxq 4' +-<\0+-AM a2. N.0. D $3-A @L4 '-AM d.0M. D 8 H =XC-4 >KC-AM di.@Z.K H EG-4pDBG-AO Y.g D .$-8RU-AM j.Pf A #.xI:-4h Z=BHD  MBO Z CBA .DW'`[BEB B(D0D8D` 8A0A(B BBBA 8A0A(B BBB4^LH^ BBB B(A0A8Gz 8A0A(B BBBK D|k BBB B(A0A8 0A(B BBBA LDmBBE B(A0A8D: 8A0A(B BBBK D0oBBB B(A0A8Gp8A0A(B BBBLxoBBB B(A0A8G 8A0A(B BBBF htlt[+BBE B(A0A8G 8A0A(E BBBN 3 8A0A(B BBBA ,zPLRxl 4g*P({h*BJB B(A0A8G. 8D0A(B BBBD ,zPLRxQl 4b_*( 3AL FK I P`G*BEB B(A0A8J 8A0A(B BBBI ,zPLRxk 4+)H sBBB B(A0A8NP 8A0A(B BBBK H, HcBBB B(A0A8NP 8A0A(B BBBF Hx lcBBB B(A0A8NP 8A0A(B BBBF Pp p(BFE G(D0D8R 8D0A(B BBBI ,zPLRx j 4L(4 {(AI HGW.f J  |L( .DW qD m G  % (D` 'BU$ &8 BU %'D` 4'BU 4& PBU<l TD'BBD A(D@ (A ABBF $zPLRx!h @,&@ ČAW\ ȌAWx ̌AW ЌAW<\ Ԍf&BBD A(D@ (A ABBF  0&lAW$pAW@tAW\x ptpl8D n A `t%DI|\%BMtyD r J  ؍ BM,؍$BDD@U DBK zPLRxe @(D $<T,w$BEG D(H0N (A ABBA $zPLRx9e 0, O$(,<(P$"DUh<|84<4#BLD D@]  ABBA $zPLRxYd @, #4L#BLD D@h  ABBA | T#XDIpALDI4P"BLD D@]  ABBA B "4"BLD D@h  ABBA h "D@DI\HAL4$LM"BLD D@]  ABBA  !"4t"BLD D@h  ABBA <N !܏DI0AL4!BLD D@]  ABBA v!4H(f!BLD D@h  ABBA ;!xDIAL4 BLD D@]  ABBA & 4Đ BLD D@h  ABBA  DIAL4 L BLD D@]  ABBA hr 4` BLD D@h  ABBA 2DIALDI4đBLD D@]  ABBA T]4MBLD D@h  ABBA f"TDI\AL4``BLD D@]  ABBA (4BLD D@h  ABBA xwTDIlAL443BLD D@]  ABBA >4<BLD D@h  ABBA L(DI@AL\t0BAA K0[  AABB 0(BDD K0T  AABC 4BAA K0[  AABB <BMH,\8K(ptBDK N ABF  ( <\PT0h<0|8ACG0| AAG wAA"N X(<PĖdЖ#x!@8BBB A(A0D@_ 0A(A BBBE H OBBE B(E0D8G` 8A0A(B BBBF (lkAGG D AAK <HTPKZؙBM(,ؙBDK O ABE Xllhd`\XT P L H D4@ H<\8p4 0@<BDA G0  AABJ m  AABG F\KPHD $@8<L8Q`DQtPLH D 8@wBFD C(D0o (D ABBE 8 wBFD A(G0m (A ABBI < țBM(X BDK N ABF $ PhD [ A ] C O A $ *AIG SDA0 LADG a ADF NAD DV<$!LBH A(A0 (A BBBK d!x!!0X$!ԝ0AMI SDA!ܝ;`!!B\$ ".AKI SDA4"4H"<H\"8LBB E(D0A8DP 8D0A(B BBBE "@h""$"0BDJ MJD #7\ #4BY$<#80BDJ MJDd#@/Wx#\3[#>f(#PBEG \ EDE 8#ءhBEG D(G0` (G DEBE $ Ch$HFk0$FkD$ChX$Jr8l$8qBED G(J0l (G ABBE $|Fk$Fk$2Z($ LBDD c AEA %DxD| E ,%mGn E (H%BDI A ABE t%` %\ %X=e%%Y(%IBDJ _ GBE (%ĥIBDJ _ GBE &%Y0&%Y D& gBw G K A h&l |&h&d&`H&\BBB B(A0A8DP 8D0A(B BBBF ' (',BEG REB$D'EBHD pDB8l'yBBH A(D0N (D ABBH '\ ('X,BEG REB'\5P'dGEB D(D0k (H BBBA D(A BBBAP( (d(,BEG REB( H(}BBA A(D0N (D ABBG D(H DBB(Ԩ ()Ш,BEG REB0)Ԩ HD)ШhBBB A(A0B (A BBBG A(H BBB) (),BEG REB)84) `BBH A(D0E(D ABB*H (0*D,BEG REB\*H5$p*tSAAD JAA(*AAD \ AAA (*AAD n AAA 4*iBED A(D0R(A ABB<(+BBB D(A0g (A BBBA (h+AAD [ AAA +p+l@h+hG BBB G(I0_ (D BBBA <+ԫ BFD C(G0G (D ABBA 0@,BDG G0L  AABD t, 0,BDG G0L  AABD ,0,BDD G0^  AABE -- <,_BBD E(G0h (D ABBA 0l-ȭBDD G0^  AABE -T;c-Hm-Hm-$-?BOG YGB. ,. @.TBv A \.H p.D 0.@AC BL$zPLRxyF  ,N&l.دAS C$ /AZ C A <4/0jBEB F(A0 (A BBBG E,5           VLE!728El}E$5W}EQ}D$5W}D=cMEIU     \D %uDDE8O   }C #LsG}C]QTS       Z}C }}hC9.:N         },C<to}Cz9     B56pBUL        B9cA(=X(  0    0c<RV#hUG0 X-SNO O  %4  (6o[ ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<& ,<~  ,<&  7 >N-,g{ $3FZ PC@BpBCmXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX m60F0V0f0v00000000011&161F1V1f1v11111111122&262F2V2f2v22222222233&363F3V3f3v33333333344&464F4V4f4v4444Construct the N-D tensor product collocation matrix as a CSR array. In the dense representation, each row of the collocation matrix corresponds to a data point and contains non-zero b-spline basis functions which are non-zero at this data point. Parameters ---------- xvals : ndarray, shape(size, ndim) Data points. ``xvals[j, :]`` gives the ``j``-th data point as an ``ndim``-dimensional array. t : tuple of 1D arrays, length-ndim Tuple of knot vectors k : ndarray, shape (ndim,) Spline degrees Returns ------- csr_data, csr_indices, csr_indptr The collocation matrix in the CSR array format. Notes ----- Algorithm: given `xvals` and the tuple of knots `t`, we construct a tensor product spline, i.e. a linear combination of B(x1; i1, t1) * B(x2; i2, t2) * ... * B(xN; iN, tN) Here ``B(x; i, t)`` is the ``i``-th b-spline defined by the knot vector ``t`` evaluated at ``x``. Since ``B`` functions are localized, for each point `(x1, ..., xN)` we loop over the dimensions, and - find the location in the knot array, `t[i] <= x < t[i+1]`, - compute all non-zero `B` values - place these values into the relevant row In the dense representation, the collocation matrix would have had a row per data point, and each row has the values of the basis elements (i.e., tensor products of B-splines) evaluated at this data point. Since the matrix is very sparse (has size = len(x)**ndim, with only (k+1)**ndim non-zero elements per row), we construct it in the CSR format. Evaluate an N-dim tensor product spline or its derivative. Parameters ---------- xi : ndarray, shape(npoints, ndim) ``npoints`` values to evaluate the spline at, each value is a point in an ``ndim``-dimensional space. t : ndarray, shape(ndim, max_len_t) Array of knots for each dimension. This array packs the tuple of knot arrays per dimension into a single 2D array. The array is ragged (knot lengths may differ), hence the real knots in dimension ``d`` are ``t[d, :len_t[d]]``. len_t : ndarray, 1D, shape (ndim,) Lengths of the knot arrays, per dimension. k : tuple of ints, len(ndim) Spline degrees in each dimension. nu : ndarray of ints, shape(ndim,) Orders of derivatives to compute, per dimension. extrapolate : int Whether to extrapolate out of bounds or return nans. c1r: ndarray, one-dimensional Flattened array of coefficients. The original N-dimensional coefficient array ``c`` has shape ``(n1, ..., nd, ...)`` where each ``ni == len(t[d]) - k[d] - 1``, and the second '...' represents trailing dimensions of ``c``. In code, given the C-ordered array ``c``, ``c1r`` is ``c1 = c.reshape(c.shape[:ndim] + (-1,)); c1r = c1.ravel()`` num_c_tr : int The number of elements of ``c1r``, which correspond to the trailing dimensions of ``c``. In code, this is ``c1 = c.reshape(c.shape[:ndim] + (-1,)); num_c_tr = c1.shape[-1]``. strides_c1 : ndarray, one-dimensional Pre-computed strides of the ``c1`` array. Note: These are *data* strides, not numpy-style byte strides. This array is equivalent to ``[stride // s1.dtype.itemsize for stride in s1.strides]``. indices_k1d : ndarray, shape((k+1)**ndim, ndim) Pre-computed mapping between indices for iterating over a flattened array of shape ``[k[d] + 1) for d in range(ndim)`` and ndim-dimensional indices of the ``(k+1,)*ndim`` dimensional array. This is essentially a transposed version of ``np.unravel_index(np.arange((k+1)**ndim), (k+1,)*ndim)``. Returns ------- out : ndarray, shape (npoints, num_c_tr) Output values of the b-spline at given ``xi`` points. Notes ----- This function is essentially equivalent to the following: given an N-dimensional vector ``x = (x1, x2, ..., xN)``, iterate over the dimensions, form linear combinations of products, B(x1) * B(x2) * ... B(xN) of (k+1)**N b-splines which are non-zero at ``x``. Since b-splines are localized, the sum has (k+1)**N non-zero elements. If ``i = (i1, i2, ..., iN)`` is a vector if intervals of the knot vectors, ``t[d, id] <= xd < t[d, id+1]``, for ``d=1, 2, ..., N``, then the core loop of this function is nothing but ``` result = 0 iters = [range(i[d] - self.k[d], i[d] + 1) for d in range(ndim)] for idx in itertools.product(*iters): term = self.c[idx] * np.prod([B(x[d], self.k[d], idx[d], self.t[d]) for d in range(ndim)]) result += term ``` For efficiency reasons, we iterate over the flattened versions of the arrays. Find an interval such that t[interval] <= xval < t[interval+1]. Uses a linear search with locality, see fitpack's splev. Parameters ---------- t : ndarray, shape (nt,) Knots k : int B-spline degree xval : double value to find the interval for prev_l : int interval where the previous value was located. if unknown, use any value < k to start the search. extrapolate : int whether to return the last or the first interval if xval is out of bounds. Returns ------- interval : int Suitable interval or -1 if xval was nan. Evaluate the ``k+1`` B-splines which are non-zero on interval ``m``. Parameters ---------- t : ndarray, shape (nt + k + 1,) sorted 1D array of knots k : int spline order xval: float argument at which to evaluate the B-splines m : int index of the left edge of the evaluation interval, ``t[m] <= x < t[m+1]`` nu : int, optional Evaluate derivatives order `nu`. Default is zero. Returns ------- ndarray, shape (k+1,) The values of B-splines :math:`[B_{m-k}(xval), ..., B_{m}(xval)]` if `nu` is zero, otherwise the derivatives of order `nu`. Examples -------- A textbook use of this sort of routine is plotting the ``k+1`` polynomial pieces which make up a B-spline of order `k`. Consider a cubic spline >>> k = 3 >>> t = [0., 1., 2., 3., 4.] # internal knots >>> a, b = t[0], t[-1] # base interval is [a, b) >>> t = np.array([a]*k + t + [b]*k) # add boundary knots >>> import matplotlib.pyplot as plt >>> xx = np.linspace(a, b, 100) >>> plt.plot(xx, BSpline.basis_element(t[k:-k])(xx), ... lw=3, alpha=0.5, label='basis_element') Now we use slide an interval ``t[m]..t[m+1]`` along the base interval ``a..b`` and use `evaluate_all_bspl` to compute the restriction of the B-spline of interest to this interval: >>> for i in range(k+1): ... x1, x2 = t[2*k - i], t[2*k - i + 1] ... xx = np.linspace(x1 - 0.5, x2 + 0.5) ... yy = [evaluate_all_bspl(t, k, x, 2*k - i)[i] for x in xx] ... plt.plot(xx, yy, '--', label=str(i)) >>> plt.grid(True) >>> plt.legend() >>> plt.show() Evaluate a spline in the B-spline basis. Parameters ---------- t : ndarray, shape (n+k+1) knots c : ndarray, shape (n, m) B-spline coefficients xp : ndarray, shape (s,) Points to evaluate the spline at. nu : int Order of derivative to evaluate. extrapolate : int, optional Whether to extrapolate to ouf-of-bounds points, or to return NaNs. Returns ------- out : ndarray, shape (s, m) Computed values of the spline at each of the input points. Construct the normal equations for the B-spline LSQ problem. The observation equations are ``A @ c = y``, and the normal equations are ``A.T @ A @ c = A.T @ y``. This routine fills in the rhs and lhs for the latter. The B-spline collocation matrix is defined as :math:`A_{j,l} = B_l(x_j)`, so that row ``j`` contains all the B-splines which are non-zero at ``x_j``. The normal eq matrix has at most `2k+1` bands and is constructed in the LAPACK symmetrix banded storage: ``A[i, j] == ab[i-j, j]`` with `i >= j`. See the doctsring for `scipy.linalg.cholesky_banded` for more info. Parameters ---------- x : ndarray, shape (n,) sorted 1D array of x values t : ndarray, shape (nt + k + 1,) sorted 1D array of knots k : int spline order y : ndarray, shape (n, s) a 2D array of y values. The second dimension contains all trailing dimensions of the original array of ordinates. w : ndarray, shape(n,) Weights. ab : ndarray, shape (k+1, n), in Fortran order. This parameter is modified in-place. On entry: should be zeroed out. On exit: LHS of the normal equations. rhs : ndarray, shape (n, s), in C order. This parameter is modified in-place. On entry: should be zeroed out. On exit: RHS of the normal equations. Build the B-spline colocation matrix. The colocation matrix is defined as :math:`B_{j,l} = B_l(x_j)`, so that row ``j`` contains all the B-splines which are non-zero at ``x_j``. The matrix is constructed in the LAPACK banded storage. Basically, for an N-by-N matrix A with ku upper diagonals and kl lower diagonals, the shape of the array Ab is (2*kl + ku +1, N), where the last kl+ku+1 rows of Ab contain the diagonals of A, and the first kl rows of Ab are not referenced. For more info see, e.g. the docs for the ``*gbsv`` routine. This routine is not supposed to be called directly, and does no error checking. Parameters ---------- x : ndarray, shape (n,) sorted 1D array of x values t : ndarray, shape (nt + k + 1,) sorted 1D array of knots k : int spline order ab : ndarray, shape (2*kl + ku + 1, nt), F-order This parameter is modified in-place. On exit: B-spline colocation matrix in the band storage with ``ku`` upper diagonals and ``kl`` lower diagonals. Here ``kl = ku = k``. offset : int, optional skip this many rows Pm@I0`]PXO`H  M J|@x+pg`rGCC: (GNU) 10.2.1 20210130 (Red Hat 10.2.1-11)(PX0 04  p $ lT lmm op`r0c`C3'CC8T4uH@Ic5GJp5\# M<D6\ZO6P6 X71`] Q8XvpgK9mB:|U<:A hT@B.u@`0 ?F@x "`rQ='4=g|^>_>+?L4@|BpB.uA^n@@@@@/ AA*A:A JAyZAjAzAAgAAA AU Ay A A  BM ] B&  B B C 0 m PC  l   hT' 0V q    FV pc  p8 P     /@|,wXt,V `3@ `@9S0%0 ,FwP p@0 RswC8}@0H5 }@`0 x@402In50"^0 (e @5 \To &P &'@}r` )0FyP0D@ g3 `p"LmYs # D p] `z P  !Z!!@!`k" "";f"P""P#Z#v#м%#.# $p,c$Px$$( %p0p%,%!&>&&Y&?&&h& ''o'PJ'H"(`((=(3) q) )*4*@P* ** +T+ l++K+`+8+ ;,,pL,4-/w->-p%--.V.v.@..pZ.;9/ /@//?*0p i0 00=1X111pF28k2m22G33033`g.4 q4`4P4 5958T5o5 5 55 6PW6pi66pZ6_7~77м%7`7 808)8P}808 m8@909@*9x9@*9 H:0H:h:p%: :;Z;F;<Q<C<`y<+=`=%= *>KD>P_>@>> FI?i? ?2@ @@@0 %AcALA6B0%BBB@Bp07C@~CC0CsGD,DDODPqE,E}EE F`[F F0# G'G |G`GG0h+HlH`jHpHPPH@I,I@IIS/J`JJHJ K@T\KPK'LqL`FM7FMjM`M` MNTNtN NN&OOOO2aP0PdP,QkQQQ RTRR KR`R S`#SP@S0SSpShT`QTiTPTTT`yU UUUpUUJVp`VVV0V@$W ?W@WWW;!X;X~X_XX ;YzY`IYZ*Z0 hZZ KZ[0EB[`[p"[[[ [[\)\ 9\h\\\\\ \\ ]"(]<]P]s]]]]]])^=^p=M^g^ q^^ ^^^^_%_ >_J___y_____ `0`J`n` ~` ````` a1aWayaaaaaab>bXb|bbbbbc#cHc`cqcccccd$d